C# Net核心:实体框架和SQL Server时态表,自动搭建
我们在使用实体框架核心2.2和SQL Server临时系统版本表时遇到问题 以下内容解决了实体框架和系统版本控制列的问题 使用该解决方案,Entity Framework Core 2.2是否有办法自动在系统版本控制列上添加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多个表手动添加此项
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;
}
}
}
}