同步操作将从 magicodes/Magicodes.Admin.Core 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
编辑者 | 说明 | 时间 |
---|---|---|
闵滔滔 |
接口必须有子类,子类使用用implements进行接口实现,一个子类可以同时实现多个接口 public interface IStudentAppService : IApplicationService
事实上Entity 实现了IEntity 接口(和Entity 实现了 IEntity接口)。如果你不想从Entity 类派生,你能直接的实现这些接口。其他实体类也可以实现相应的接口。但是不建议你用这种方式。除非你有一个很好的理由不从Entity 类派生。
如果你想为一个实体实现所有的接口(创建,修改和删除),那么可以直接实现IFullAudited,因为它继承了所有的这些接口:
public interface IFullAudited : IAudited, IDeletionAudited {
} 作为一个快捷方式,你可以直接从FullAuditedEntity 类派生你的实体类,因为该类已经实现了IFullAudited接口。
注意:所有的审计接口和类都有一个定义导航属性到User实体的泛型版本(比如ICreationAudited和FullAuditedEntity<tprimarykey,tuser>)。
如果你正在创建多租户应用并存储所有租户数据在一个数据库里,你明确地不想一个租户的数据意外地被另一个租户看到,这种情况下你可用IMustHaveTenant。例如:
public class Product : Entity, IMustHaveTenant { public int TenantId { get; set; }
public string Name { get; set; }
}
IMustHaveTenant定义了TenantId,区别不同的租户实体。ABP默认情况下使用IAbpSeesion获取当前TenantId,并自动为当前租户过滤查询。
何时可用?
IMustHaveTenant默认可用。
如果当前用户尚未登录系统或当前是个宿主用户(宿主用户是一个更高级别的用户,它管理租户和租户数据),ABP自动禁用IMustHaveTenant过滤,因此,可以获取所有租户的所有数据。注意:这与安全性无关,你应当一直授权敏感数据。
IMayHaveTenant
如果一个实体类被租户和宿主共享(也就是说一个实体对象可被租户或宿主拥有),你可以使用IMayHaveTenant过滤。IMayHaveTenant接口定义了TenantId,但它是可空的。
public class Role : Entity, IMayHaveTenant { public int? TenantId { get; set; }
public string RoleName { get; set; }
}
一个null值表示这是个宿主实体,一个非null值表示这个实体被Id为TenantId的租户拥有。默认情况下,ABP使用IAbpSeesion获取当前TenantId。IMayHaveTenant过滤不像IMustHaveTenant那么通用,但在实体类型通用宿主和租户时,需要它。
如何可用?
IMayHaveTenant一直可用,除非你显式禁用它。
特性(Attributes)是一种崭新的声明性信息。我们不仅可以通过特性来定义设计层面的信息(例如help file, URL for documentation)以及运行时(run-time)信息(例如使XML与class相联系),而且我们还可以利用特性建立自描述(self- describing)组件。 [MaxLength(30)],设置数据的最大长度 [Required],字段为非空字段 [Display(Name = "名称")],显示属性 [DataType(DataType.Date)] ,指定数据显示格式 [EmailAddress] ,邮件址验证,能提供服务端与客户端的验证。 [DataType(DataType.MultilineText)] ,指定类型为多行字码 [RegularExpression(@"^[1-9][0-9]{5,9}$",ErrorMessage="你输入的不是有效的QQ号码")] 正则表达式验证 public string Name { get; set; }
ef的模型是数据库那边用的。设置Required就是进入数据库的环节必须赋值。
namespace Magicodes.Admin.Tutorial.Student
{
public class StudentInfo:Entity<long>
{
/// <summary>
/// 姓名
/// </summary>
[Display(Name = "姓名")]
[Required]
[MaxLength(50)]
public string Name { get; set; }
/// <summary>
/// 出生日期
/// </summary>
[Display(Name = "出生日期")]
[Required]
public DateTime BirthDate { get; set; }
/// <summary>
/// 性别
/// </summary>
[Display(Name="性别")]
[Required]
public Genders Genders { get; set; }
}
public enum Genders
{
/// <summary>
/// 男
/// </summary>
Male=0,
/// <summary>
/// 女
/// </summary>
Female=10
}
}
其中定义了Genders状态枚举。其中[Required]、[MaxLength]特性是用来进行输入校验的。
///
/// <summary>
/// 名称
/// </summary>
[MaxLength(30)]
[Required]
[Display(Name = "名称")]
public string Name { get; set; }
/// <summary>
/// 栏目介绍
/// </summary>
[MaxLength(1000)]
[Required]
[Display(Name = "栏目介绍")]
public string Content { get; set; }
/// <summary>
/// 是否为父级ID
/// </summary>
[Display(Name = " 是否为父级ID")]
public bool IsParent { get; set; }
/// <summary>
/// 父级Id
/// </summary>
public long? ParentId { get; set; }
///
/// <summary>
/// 文章标题图片
/// </summary>
[MaxLength(200)]
[Display(Name = "文章标题图片")]
public string Image { get; set; }
/// <summary>
/// 文章简介
/// </summary>
[MaxLength(2000)]
[Display(Name = "文章简介")]
public string Summary { get; set; }
/// <summary>
/// 内容
/// </summary>
[DataType(DataType.Html)]
[Required]
[Display(Name = "内容")]
public string Content { get; set; }
/// <summary>
/// 栏目Id
/// </summary>
public long? ColumnId { get; set; }
[ForeignKey("ColumnId")]
public Column Column { get; set; }
/// <summary>
/// 文件Id
/// </summary>
public long? FileId { get; set; }
}
///
/// <summary>
/// 创建时间
/// </summary>
[Display(Name ="创建时间")]
public DateTime CreationTime { get; set; }
/// <summary>
/// 最后修改者UserId
/// </summary>
[Display(Name ="最后修改者UserId")]
public long? LastModifierUserId { get; set; }
/// <summary>
/// 最后修改时间
/// </summary>
[Display(Name ="最后修改时间")]
public DateTime? LastModificationTime { get; set; }
/// <summary>
/// 删除者UserId
/// </summary>
[Display(Name ="删除者UserId")]
public long? DeleterUserId { get; set; }
/// <summary>
/// 删除时间
/// </summary>
[Display(Name ="删除时间")]
public DateTime? DeletionTime { get; set; }
/// <summary>
/// 是否删除
/// </summary>
[Display(Name ="是否删除")]
public bool IsDeleted { get; set; }
/// <summary>
/// 租户Id
/// </summary>
[Display(Name ="租户Id")]
public int? TenantId { get; set; }
}
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。