我有以下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; }
}
我所有其他实体都来自它。现在我想使用流畅的配置而不是DataAnnotations。我是否真的必须在每个DbModelBuilder
配置中配置两个字符串属性的MaxLength?
答案 0 :(得分:5)
我真的必须配置两个字符串的MaxLength 每个DbModelBuilder配置中的属性?
没有。您可以配置基本类型验证,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);
}
更新(根据您的评论):
您可以使用(而不是新的)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));
请参阅MSDN