Entity Framework Core和SQL Server 2016时间表

7
我们正在使用EF Core和SQL Server 2016作为我们的.NET Core Web API。我正在评估使用时间表对EF Core代码的影响。当我使用cmdline生成EF模型时,它会生成具有appstart、append和映射的模型 dbcontext 。当我进行插入/更新时,它们失败并说这些列不能被更新。我不得不从模型中删除appstart、end和dbcontext映射才能使其正常工作。我读到EF Core还没有像EF 6.x那样的拦截功能,请告知是否有更好的解决方案。
5个回答

5

我尝试了以下选项,它们都有效。

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

  2. 选项2:使用以下属性装饰周期列。


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

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

3

目前为止,对于这个问题还没有更好的解决方案,而且该功能已经被列入了待办事项列表中 (backlog)


有没有办法在数据库优先方法中绕过“GENERATED ALWAYS”列的插入/更新?我使用DBScaffold命令生成模型,但我无法使用此处标记为答案的解决方案,因为每次我从数据库生成模型时,所有内容都会被覆盖。https://dev59.com/w67la4cB1Zd3GeqPkd8E - VPP
// 这是一段关于编程的内容,请将其翻译成中文。请仅返回翻译后的文本: - user13431554

0

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

0
隐藏周期开始列(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 

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接