【问题标题】:Entity Framework Core and SQL Server 2016 temporal tablesEntity Framework Core 和 SQL Server 2016 时态表
【发布时间】:2017-03-06 14:02:40
【问题描述】:

我们将 EF Core 和 SQL Server 2016 用于我们的 .NET Core Web API。我正在评估临时表的使用及其对 EF Core 代码的影响。当我使用 cmdline 生成 EF 模型时,它会在dbcontext 中生成带有 appstart、append 和映射的模型。当我插入/更新时,他们说这些列无法更新。我必须从模型中删除 appstart、end 和 dbcontext 映射才能使其正常工作。我读到 EF Core 中还没有像 EF 6.x 这样的拦截功能。

请告知任何更好的解决方案。

【问题讨论】:

    标签: c# asp.net-core .net-core entity-framework-core temporal-tables


    【解决方案1】:

    我尝试了以下选项,它们正在工作。

    1. 选项 1:删除 appstart,从实体中追加字段和 dbcontext 映射和更新/插入开始正常工作。

    2. 选项 2:用 属性如下。


    [DatabaseGenerated(DatabaseGeneratedOption.Computed)]
    public DateTime StartTime { get; set; }
    
    [DatabaseGenerated(DatabaseGeneratedOption.Computed)]
    public DateTime EndTime { get; set; } 
    

    【讨论】:

      【解决方案2】:

      目前没有更好的解决方案,该功能位于backlog

      【讨论】:

      • 在数据库优先方法中插入/更新期间绕过“始终生成”列的任何解决方案。 ?我使用 DBScaffold 命令生成模型,但我无法使用此处标记为答案的解决方案,因为每次从数据库生成模型时,所有内容都会被覆盖。 stackoverflow.com/questions/52654609/…
      • 这应该作为评论,不作为解决方案,其实有解决方案
      【解决方案3】:

      隐藏期间开始列 (StartTime) 和期间结束列 (EndTime) 应该可以解决此问题。我们可以这样做

      ALTER TABLE [dbo].[Table1] ALTER COLUMN [StartTime] ADD HIDDEN;
      ALTER TABLE [dbo].[Table1] ALTER COLUMN [EndTime] ADD HIDDEN;
      

      我们可以在 sys.columns 表中看到隐藏这些列的设置

      SELECT * FROM sys.columns WHERE is_hidden = 1 
      

      【讨论】:

        【解决方案4】:

        我认为有一个更好的解决方案如下: 创建部分上下文文件(以防止重新生成模型后重新进行更改)如下

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

        【讨论】:

          【解决方案5】:

          .NET 6 和 Entity Framework Core 6.0 支持开箱即用的 SQL Server 时态表。

          有关示例,请参见此答案:

          https://stackoverflow.com/a/70017768/3850405

          【讨论】:

            猜你喜欢
            • 2023-03-25
            • 2017-10-19
            • 1970-01-01
            • 2018-04-12
            • 1970-01-01
            • 2020-05-29
            • 1970-01-01
            • 2018-09-02
            • 1970-01-01
            相关资源
            最近更新 更多