在数据库对象未更改时调用 SaveChanges

Calling SaveChanges when database objects have not been changed

我正在使用 EF6 编写 MVC 5 互联网应用程序,我对调用 context.SaveChanges() 方法时会发生什么有疑问。

DbContext 对象是否存储发生的 CRUD 操作,以便如果调用 SaveChanges() 方法并更新数据库中的 none 数据,则不会发生任何操作?

这是一个例子:

  1. 我创建了一个简单的模型对象,然后将其添加到数据库并调用 SaveChanges。
  2. 我检索了这个简单的对象,将其中一个对象的值设置为与当前值相同,然后调用 SaveChanges。

在上面的示例中,是否对数据库进行了任何更改?是否发生任何数据库事务?

我做了一些研究,但找不到这个问题的答案。

提前致谢。

不,实体没有改变,它的状态没有改变,所以 EF 对那些不感兴趣。

如果需要,您可以通过手动更改实体状态来强制保存。

EF6 使用更改跟踪器来检测是否有任何更改。
当您调用 SaveChanges() 时,EF6 要做的第一件事就是调用 DetectChanges(),它将检查更改跟踪器。

现在假设您真的想知道是否发生了某些变化,您也可以自己查看 changetracker。 post 显示了答案中的方式:
Entity Framework 6: audit/track changes