【问题标题】:Entity framework save changes实体框架保存更改
【发布时间】:2016-02-15 07:27:38
【问题描述】:

只读操作后是否需要保存更改?实体被加载到缓存中,但没有任何变化,是否应该在 dispose 之前调用 save 更改?

【问题讨论】:

  • 如果不做任何更改,保存的目的是什么?

标签: c# ef-code-first entity-framework-6


【解决方案1】:

来自doc (DbContext.SaveChanges):

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

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

您可以详细了解此内容here

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

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

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

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

【讨论】:

    【解决方案2】:

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

    1. Add
    2. Update
    3. Delete

    【讨论】:

      猜你喜欢
      • 2014-06-07
      • 1970-01-01
      • 1970-01-01
      • 2017-12-10
      • 2023-04-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多