EF Core-自从使用SQL ON UPDATE CURRENT_TIMESTAMP

时间:2019-03-06 21:53:00

标签: c# entity-framework

在尝试第二次更新同一记录时,出现“ 由于加载实体以来数据可能已被修改或删除”异常。我发现问题是因为我在MySQL中使用下面的列定义,并且看来我没有在实体中正确处理此问题。

last_updated_at datetime(6) NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP

dbItem.LastUpdatedAt = DateTime.Now;

如果我按照上述方法从我的实体中更新值并保存,那么它将起作用。

但是,如果我不更新实体的值,则第二次更新将不起作用,并抛出“自加载实体以来数据可能已被修改或删除”的异常

这将是一个好的解决方案。

1 个答案:

答案 0 :(得分:0)

您想要的是,在添加/更新操作结束时,EF将从数据库中获取更新的值。您可以使用ValueGeneratedOnAddOrUpdate配置来实现此目的。

与名称所暗示的相反,您仍然可以提供自己的值,该值将包含在上下文中-如果要将值传输到以下位置,请确保不要尝试提供C#默认值。数据库

  

如果在上下文跟踪实体时为配置为ValueGeneratedOnAddOrUpdate的属性设置值,则该属性和您设置的值将包含在任何INSERT和UPDATE语句中。此值可能会保存在数据库中,具体取决于您配置值生成策略的方式。仅当您提供的值不是该属性的数据类型的CLR默认值时,此选项才适用。

引自https://www.learnentityframeworkcore.com/configuration/fluent-api/valuegeneratedonaddorupdate-method

免责声明:我从未尝试过这种方法。阅读完一些文档后,这就是我的假设。