Net Core:实体框架和SQL Server临时表,自动脚手架 [英] Net Core: Entity Framework and SQL Server Temporal Tables, Automatic Scaffolding

查看:57
本文介绍了Net Core:实体框架和SQL Server临时表,自动脚手架的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在使用带有SQL Server临时SystemVersioningTables的Entity Framework Core 2.2时,我们遇到了问题.

以下内容解决了Entity Framework和系统版本控制列的问题. entityframework核心和sql 2016临时表

使用该解决方案,Entity Framework Core 2.2是否可以在SystemVersioning列上自动添加 DatabaseGeneratedOption.Computed OnModelCreating ?

dotnet ef dbcontext支架中是否有命令参数?

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

公司有很多数据库.

  [DatabaseGenerated(DatabaseGeneratedOption.Computed)] 

 公共子类DatabaseDBContext:DbContext{局部无效的OnModelCreating(ModelBuilder modelBuilder){modelBuilder.Entity< Table1>(实体=>{entity.Property(e => e.StartTime).ValueGeneratedOnAddOrUpdate();entity.Property(e => e.EndTime).ValueGeneratedOnAddOrUpdate();});}} 

我们正在使用.NET Core 2.2.

注意:我们不想隐藏SQL Server列,这是本文的第三个解决方案.

解决方案

在OnModelCreating中,您可以检查和修改模型.如此简单:

 受保护的重写void OnModelCreating(ModelBuilder modelBuilder){base.OnModelCreating(modelBuilder);foreach(在modelBuilder.Model.GetEntityTypes()中的var等){foreach(et.GetProperties()中的var prop){如果(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一样.请参阅entityframework core and sql 2016 temporal tables

Using the solution, is there a way for Entity Framework Core 2.2 to automatically add DatabaseGeneratedOption.Computed or OnModelCreating on SystemVersioning columns?

Is there a command parameter in dotnet ef dbcontext scaffold ?

We are seeking a way to automatically add this in, during automatic database scaffolding. This way, we don't have to manually add this in for all our 1000+ tables, or anytime we add new ones.

Company has many databases.

[DatabaseGenerated(DatabaseGeneratedOption.Computed)] 

or

public partial class DatabaseDBContext : DbContext
{
    partial void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Table1>(entity =>
        {
            entity.Property(e => e.StartTime)
                .ValueGeneratedOnAddOrUpdate();
            entity.Property(e => e.EndTime)
                .ValueGeneratedOnAddOrUpdate();
        });
    }
}

We're using .NET Core 2.2.

Note: we do not want to hide the SQL Server columns, given as third solution in article.

解决方案

In OnModelCreating you can examine and modify the model. So this is as easy as:

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;
            }
        }
    }
}

This is for EF Core 3.1. EF Core 2.2 is out of support. 2.1 is an LTS branch, as is 3.1. See https://devblogs.microsoft.com/dotnet/net-core-2-2-will-reach-end-of-life-on-december-23-2019/

这篇关于Net Core:实体框架和SQL Server临时表,自动脚手架的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆