实体框架保存更改

问题描述 投票:6回答:2

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

c# ef-code-first entity-framework-6
2个回答
6
投票

来自doc (DbContext.SaveChanges)

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

如果您没有对上下文进行任何更改,那么调用SaveChanges没有任何意义。

你可以在here中详细了解这个

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

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

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

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

1
投票

除非你这样做,否则你不需要打电话给SaveChanges()

  1. Add
  2. Update
  3. Delete
© www.soinside.com 2019 - 2024. All rights reserved.