San*_*dro 2 c# entity-framework ef-code-first ef-fluent-api
我有以下BaseEntity
public class BaseEntity
{
public BaseEntity()
{
DateCreated = DateTime.UtcNow;
DateModified = DateTime.UtcNow;
}
public DateTime DateCreated { get; set; }
public DateTime DateModified { get; set; }
[MaxLength(36)]
public string CreateUserId { get; set; }
[MaxLength(36)]
public string ModifyUserId { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我所有的其他实体都来自它.现在我想使用流畅的配置而不是DataAnnotations.我是否真的必须在每个DbModelBuilder配置中配置两个字符串属性的MaxLength ?
我是否真的必须在每个DbModelBuilder配置中配置两个字符串属性的MaxLength?
不可以.您可以配置基本类型验证,EF会将它们应用于派生类型.例如:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<BaseEntity>().Property(x => x.CreateUserId).HasMaxLength(36);
modelBuilder.Entity<BaseEntity>().Property(x => x.ModifyUserId).HasMaxLength(36);
base.OnModelCreating(modelBuilder);
}
Run Code Online (Sandbox Code Playgroud)
更新(根据您的评论):
您可以使用(而非新)Properties()方法基于属性名称而不是实体类型定义映射和验证.
例如:
modelBuilder.Properties().Where(x => x.Name == "CreateUserId").Configure(x => x.HasMaxLength(36));
modelBuilder.Properties().Where(x => x.Name == "ModifyUserId").Configure(x => x.HasMaxLength(36));
Run Code Online (Sandbox Code Playgroud)
请参阅MSDN