我们正在使用efcore和sql 2016作为我们的.net核心web api。我正在评估时态表的使用及其对efcore代码的影响。当我使用cmd行生成ef模型时,它会在dbcontext中使用appstart,append和mappings生成模型。当我插入/更新时,他们无法说这些列无法更新。我不得不删除appstart,从模型和dbcontext映射结束以使其工作。我读过ef6x等efcore中没有拦截功能。请为此提出更好的解决方案。
答案 0 :(得分:5)
我尝试了以下选项,他们正在努力。
选项1:删除appstart,追加实体和的字段 dbcontext映射和更新/插入开始正常工作。
选项2:用。装饰句点列 属性如下。
[DatabaseGenerated(DatabaseGeneratedOption.Computed)]
public DateTime StartTime { get; set; }
[DatabaseGenerated(DatabaseGeneratedOption.Computed)]
public DateTime EndTime { get; set; }
答案 1 :(得分:2)
目前没有更好的解决方案,该功能在backlog上。
答案 2 :(得分: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
答案 3 :(得分: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();
});
}
}