【发布时间】:2019-07-25 17:16:56
【问题描述】:
我有一个场景,我的模型有 CreatedOn 和 UpdatedOn 字段,按照我在 EF Core 文档中找到的内容,我实现了我的类,如下所示
builder.Entity<Registro>(b =>
{
b.Property<DateTime>("CreatedOn")
.IsRequired()
.ValueGeneratedOnAdd()
.HasDefaultValueSql("GETUTCDATE()");
b.Property<DateTime>("UpdatedOn")
.IsRequired()
.ValueGeneratedOnAddOrUpdate()
.HasDefaultValueSql("GETUTCDATE()"); ;
});
public class Registro
{
public Guid Id { get; set; }
public string Nome { get; set; }
}
在插入时,两个字段都保存了正确的值,但是更新并没有像我预期的那样发生,UpdatedOn 保留了保存值。它还遵循我如何进行实体更新
public void Put(Guid id, [FromBody]string value)
{
var r = context.Registros.SingleOrDefault(x => x.Id == id);
r.Nome = value;
context.SaveChanges();
}
【问题讨论】:
-
HasDefaultValueSql 字面意思是设置底层 SQL 表的默认值。在保存之前,您需要更新模型中的 UpdatedOn 属性
-
@DarrenLamb 谢谢我正在考虑这样做,但是 ValueGeneratedOnAddOrUpdate 的行为是什么? OrUpdate 什么时候会生成一个值?
-
它只是让 EF 知道值是为添加或更新的实体生成的,它不保证 EF 会设置实际机制来生成值。 docs.microsoft.com/en-us/ef/core/modeling/…
-
@DarrenLamb thx,现在我注意到我完全忽略了红色框,我会更加小心
标签: c# asp.net-core .net-core entity-framework-core