C# Net核心:实体框架和SQL Server时态表,自动搭建

C# Net核心:实体框架和SQL Server时态表,自动搭建,c#,.net,entity-framework,asp.net-core,.net-core,C#,.net,Entity Framework,Asp.net Core,.net Core,我们在使用实体框架核心2.2和SQL Server临时系统版本表时遇到问题 以下内容解决了实体框架和系统版本控制列的问题 使用该解决方案,Entity Framework Core 2.2是否有办法自动在系统版本控制列上添加DatabaseGenerateOption.Computed或OnModelCreating dotnet ef dbcontext scaffold中是否有命令参数 我们正在寻找一种在自动数据库搭建过程中自动添加此项的方法。这样,我们就不必为所有1000多个表手动添加此项

我们在使用实体框架核心2.2和SQL Server临时系统版本表时遇到问题

以下内容解决了实体框架和系统版本控制列的问题

使用该解决方案,Entity Framework Core 2.2是否有办法自动在系统版本控制列上添加
DatabaseGenerateOption.Computed
OnModelCreating

dotnet ef dbcontext scaffold
中是否有命令参数

我们正在寻找一种在自动数据库搭建过程中自动添加此项的方法。这样,我们就不必为所有1000多个表手动添加此项,也不必在任何时候添加新表

这家公司有许多数据库

[DatabaseGenerated(DatabaseGeneratedOption.Computed)] 

公共部分类DatabaseDBContext:DbContext { 模型创建时部分无效(ModelBuilder ModelBuilder) { modelBuilder.Entity(Entity=> { Property(e=>e.StartTime) .ValueGeneratedOnAddOrUpdate(); Property(e=>e.EndTime) .ValueGeneratedOnAddOrUpdate(); }); } } 我们正在使用.NETCore2.2


注意:我们不想隐藏SQL Server列,这是本文中给出的第三种解决方案。

在OnModelCreating中,您可以检查和修改模型。因此,这很容易:

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    base.OnModelCreating(modelBuilder);

    foreach (var et in modelBuilder.Model.GetEntityTypes())
    {
        foreach (var prop in et.GetProperties())
        {
            if (prop.Name == "StartTime"|| prop.Name == "EndTime")
            {
                prop.ValueGenerated = Microsoft.EntityFrameworkCore.Metadata.ValueGenerated.OnAddOrUpdate;
            }
        }
    }
}

这是针对EF Core 3.1的。EF Core 2.2已失去支持。2.1是LTS分支,如3.1。请参见

太好了,很遗憾我使用的是EF 2.2,你说2.1是LTS分支?你认为他们最终会用LTS将该功能带到2.2吗?2.2没有得到修复或增强。你可以在2.2中做同样的事情。语法可能有点不同。嗨,大卫,也许你能回答这个问题@david browne microsoft为什么是
ValueGenerated.OnAddOrUpdate
而不是
ValueGenerated.OnAdd
?或者两者都会这样做?
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    base.OnModelCreating(modelBuilder);

    foreach (var et in modelBuilder.Model.GetEntityTypes())
    {
        foreach (var prop in et.GetProperties())
        {
            if (prop.Name == "StartTime"|| prop.Name == "EndTime")
            {
                prop.ValueGenerated = Microsoft.EntityFrameworkCore.Metadata.ValueGenerated.OnAddOrUpdate;
            }
        }
    }
}