实体框架保存更改

6 c# ef-code-first entity-framework-6

在只读操作后保存更改是否有意义?实体被加载到缓存,但没有任何变化,应该在处置之前保存更改吗?

Sim*_*son 7

来自doc(DbContext.SaveChanges):

将在此上下文中所做的所有更改保存到基础数据库.

不存在调用没有意义SaveChanges,如果你还没有在你的情况下进行任何更改.

您可以详细阅读更多关于这个这里

实体可以处于由EntityState枚举定义的五种状态之一中.这些州是:

  • 补充:实体正在被上下文跟踪,但在数据库中尚不存在
  • 未更改:实体正在被上下文跟踪并存在于数据库中,并且其属性值未从数据库中的值更改
  • 已修改:实体正由上下文跟踪并存在于数据库中,并且已修改其部分或全部属性值
  • 已删除:实体正在被上下文跟踪并存在于数据库中,但在下次调用SaveChanges时已标记为从数据库中删除
  • 已分离:上下文未跟踪实体

SaveChanges为不同状态的实体做了不同的事情:

  • SaveChanges不会触及未更改的实体.对于处于Unchanged状态的实体,不会向数据库发送更新.
  • 添加的实体将插入到数据库中,然后在SaveChanges返回时变为Unchanged.
  • 修改后的实体在数据库中更新,然后在SaveChanges返回时变为Unchanged.
  • 已删除的实体将从数据库中删除,然后从上下文中分离.