Entity framework core Entity Framework Core 2.0许多表中公共属性的默认值

Entity framework core Entity Framework Core 2.0许多表中公共属性的默认值,entity-framework-core,asp.net-core-2.0,Entity Framework Core,Asp.net Core 2.0,我正在进行代码优先的EF Core 2.0迁移。我有几个在所有实体中通用的列。所有实体都继承该类,如下所示 如何将CreateDate的默认值设置为当前日期、CreateBy设置为“系统”并将IsDeleted设置为0 public class BaseEntity { public DateTime CreateDate { get; set; } public string CreateBy { get; set; } public bool IsDeleted

我正在进行代码优先的EF Core 2.0迁移。我有几个在所有实体中通用的列。所有实体都继承该类,如下所示

如何将CreateDate的默认值设置为当前日期、CreateBy设置为“系统”并将IsDeleted设置为0

public class BaseEntity
{
    public DateTime CreateDate { get; set; }

    public string CreateBy { get; set; }

    public bool IsDeleted { get; set; }
}
我知道如何为一个单一的财产做到这一点。即

class MyContext : DbContext
{
    public DbSet<CaseDetails> CaseDetails{ get; set; }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<CaseDetail>()
            .Property(b => b.CreateDate)
            .HasDefaultValueSql("getutcdate()");

        modelBuilder.Entity<CaseDetail>()
            .Property(b => b.CreateBy)
            .HasDefaultValue("System");

        modelBuilder.Entity<CaseDetail>()
            .Property(b => b.IsDeleted)
            .HasDefaultValue("0()");
    }
}
class MyContext:DbContext
{
公共DbSet CaseDetails{get;set;}
模型创建时受保护的覆盖无效(ModelBuilder ModelBuilder)
{
modelBuilder.Entity()
.Property(b=>b.CreateDate)
.HasDefaultValueSql(“getutcdate()”);
modelBuilder.Entity()
.Property(b=>b.CreateBy)
.HasDefaultValue(“系统”);
modelBuilder.Entity()
.Property(b=>b.IsDeleted)
.HasDefaultValue(“0()”);
}
}
有谁能帮助我如何以有效的方式做到这一点,使其适用于所有实体


谢谢

这里有一种方法

foreach(modelBuilder.Model.GetEntityTypes()中的var entityType)
.Where(t=>t.ClrType.IsSubclassOf(typeof(BaseEntity)))
{
modelBuilder.Entity(
entityType.Name,
x=>
{
x、 属性(“CreateDate”)
.HasDefaultValueSql(“getutcdate()”);
x、 财产(“CreateBy”)
.HasDefaultValue(“系统”);
x、 财产(“已删除”)
.HasDefaultValue(false);
});
}

最新版本的net.core 2.0的正确方式:

    foreach (var entityType in builder.Model.GetEntityTypes()
        .Where(e => typeof(Entity<int>).IsAssignableFrom(e.ClrType)))
    {
        builder
            .Entity(entityType.ClrType)
            .Property("CreatedDate")
            .HasDefaultValueSql("getutcdate()");
    }
foreach(builder.Model.GetEntityTypes()中的var entityType)
.Where(e=>typeof(Entity).IsAssignableFrom(e.ClrType)))
{
建设者
.Entity(entityType.ClrType)
.属性(“CreatedDate”)
.HasDefaultValueSql(“getutcdate()”);
}

与类似,但配置属性而不是设置筛选器。谢谢。请允许我也知道如何在EF6中做到这一点。你是我的英雄。你节省了我的时间。