7

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

请为此提供任何更好的解决方案。

4

5 回答 5

5

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

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

  2. 选项 2:使用如下属性装饰期间列。


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

[DatabaseGenerated(DatabaseGeneratedOption.Computed)]
public DateTime EndTime { get; set; } 
于 2017-03-06T17:28:13.997 回答
3

目前没有更好的解决方案,该功能在backlog中。

于 2017-03-06T14:25:38.987 回答
1

隐藏期间开始列 (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 
于 2018-11-08T20:40:10.637 回答
0

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

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();
        });
    }
}
于 2020-04-08T15:51:15.417 回答
0

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

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

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

于 2021-11-18T09:59:20.943 回答