c# - Entity Framework 中基本实体的流畅配置

标签 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 吗?

最佳答案

Do I really have to configure the MaxLength of the two string properties in every single DbModelBuilder configuration?

没有。您可以配置基类型验证,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

关于c# - Entity Framework 中基本实体的流畅配置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29141227/

相关文章:

c# - 首先在代码中高效更新多条记录

entity-framework-4 - Entity Framework Power Tools CTP1 可以为存储过程生成类吗?

c# - 如何读取时间值,然后将其插入 TimeSpan 变量

c# - 与嵌套命名空间一起使用

entity-framework - 使用分部类向 EF 实体添加功能是一种不好的做法吗?

c# - SaveChanges 不适用于我的所有项目?

asp.net-mvc-3 - 无效的对象名称 dbo.TableName

c# - Windows 桌面搜索不返回 QueryFocusedSummary

c# - PhluffyFotos 不适用于 Azure SDK 1.3

c# - Entity Framework ,获取选中项的周边项