【发布时间】:2016-02-15 07:27:38
【问题描述】:
只读操作后是否需要保存更改?实体被加载到缓存中,但没有任何变化,是否应该在 dispose 之前调用 save 更改?
【问题讨论】:
-
如果不做任何更改,保存的目的是什么?
标签: c# ef-code-first entity-framework-6
只读操作后是否需要保存更改?实体被加载到缓存中,但没有任何变化,是否应该在 dispose 之前调用 save 更改?
【问题讨论】:
标签: c# ef-code-first entity-framework-6
来自doc (DbContext.SaveChanges):
将在此上下文中所做的所有更改保存到底层数据库。
不,如果您没有对上下文进行任何更改,那么调用 SaveChanges 是没有意义的。
您可以详细了解此内容here
实体可以处于 EntityState 枚举定义的五种状态之一。这些状态是:
- 添加:实体正在被上下文跟踪,但在数据库中尚不存在
- 未更改:实体正在被上下文跟踪并存在于数据库中,并且其属性值与数据库中的值没有变化
- 已修改:实体正在被上下文跟踪并存在于数据库中,并且其部分或全部属性值已被修改
- 已删除:实体正在被上下文跟踪并存在于数据库中,但已标记为在下次调用 SaveChanges 时从数据库中删除
- 已分离:上下文未跟踪实体
SaveChanges 对不同状态的实体做不同的事情:
- SaveChanges 不会触及未更改的实体。对于处于未更改状态的实体,更新不会发送到数据库。
- 添加的实体被插入到数据库中,然后在 SaveChanges 返回时变为 Unchanged。
- 修改后的实体在数据库中更新,然后在 SaveChanges 返回时变为未更改。
- 已删除的实体将从数据库中删除,然后从上下文中分离。
【讨论】:
你不需要打电话给SaveChanges(),除非你这样做:
AddUpdateDelete【讨论】: