实体框架中基本实体的流畅配置

时间:2015-03-19 09:42:53

标签: 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; }
}

我所有其他实体都来自它。现在我想使用流畅的配置而不是DataAnnotations。我是否真的必须在每个DbModelBuilder配置中配置两个字符串属性的MaxLength?

1 个答案:

答案 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

相关问题