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

本文关键字:调用 SaveChanges 数据库 对象 | 更新日期: 2023-09-27 17:49:34

我正在用EF6编写MVC 5互联网应用程序,我有一个关于调用context.SaveChanges()方法时会发生什么的问题。

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

下面是一个例子:

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

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

我做了一些调查,但是找不到这个问题的答案。

提前感谢。

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

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

现在假设您真的想知道某些东西是否发生了更改,您也可以自己查看更改跟踪程序。这篇文章在答案中展示了如何:
实体框架6:审计/跟踪变更

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

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