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

时间:2015-05-18 04:58:33

标签: c# asp.net-mvc-5 entity-framework-6 dbcontext savechanges

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

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

以下是一个例子:

  1. 我创建了一个简单的模型对象,然后将其添加到数据库并调用SaveChanges。
  2. 我检索这个简单的对象,将其中一个对象值设置为与当前相同,然后调用SaveChanges。
  3. 在上面的例子中,是否对数据库进行了任何更改?是否发生了任何数据库事务?

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

    提前致谢。

2 个答案:

答案 0 :(得分:2)

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

现在假设您真的想知道某些内容是否已经发生变化,您也可以自己查看更改跟踪器。这篇文章在答案中显示了如何:
Entity Framework 6: audit/track changes

答案 1 :(得分:0)

不,如果实体未更改,则状态不变,因此EF对这些实体不感兴趣。

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