【问题标题】:What effect do the different EF 4 SaveOptions have on the ObjectContext?不同的 EF 4 SaveOptions 对 ObjectContext 有什么影响?
【发布时间】:2023-03-16 01:49:01
【问题描述】:

我正在尝试解决与此处概述的错误非常相似的错误:

InvalidOperationException when calling SaveChanges in .NET Entity framework

看来解决方案(诚然,我还没有尝试过)是传递 System.Data.Objects.SaveOptions.None 作为 SaveChanges() 方法的 SaveOptions 参数。

所以在我这样做之前,我试图准确了解不同的 SaveOptions 是如何工作的(None、AcceptAllChangesAfterSave、DetectAllChanges)。但是,我无法找到明确的解释,也不确定默认值是什么。谁能澄清一下?

谢谢!

更新:我已经在这里发布了实际的问题问题:System.InvalidOperationException when trying to iteratively add objects using EF 4

【问题讨论】:

    标签: entity-framework-4


    【解决方案1】:

    短修正

    SaveOptions.DetectChangesBeforeSave :这是默认设置。当你这样做 ObjectContext.SaveChanges(),调用DetectChanges()方法 在 OSM 中同步附加实体。

    SaveChanges 是SaveChanges(SaveOptions optsions) 方法的重载版本,此无参数版本调用此方法

    SaveChanges(SaveOptions.DetectChangesBeforeSave | SaveOptions.AcceptAllChangesAfterSave)
    

    SaveOptions 是一个 Flag 枚举,总之,SaveOptions.DetectChangesBeforeSave | SaveOptions.AcceptAllChangesAfterSaveSaveChanges() 的默认值,而不是 DetectChangesBeforeSave

    【讨论】:

      【解决方案2】:

      简而言之(据我了解):

      SaveOptions.DetectChangesBeforeSave :这是默认设置。当您执行ObjectContext.SaveChanges() 时,将调用方法DetectChanges() 以同步附加OSM 中的实体。

      SaveOptions.AcceptAllChangesAfterSave :当您执行 ObjectContext.SaveChanges() 时,方法 AcceptAllChanges() 被调用 - 这是 OSM 的核心,图中的实体被迭代、寻址并设置为 Unchanged/Detached。

      SaveOptions.None :当您执行ObjectContext.SaveChanges() 时,更改会立即保存 - 根本不同步。图表中的内容将被保存。

      根据我的经验,我没有更改此设置 - 我将其保留为默认设置 (DetectChangesBeforeSave)。

      我听说有时使用 POCO 需要明确调用 DetectChanges,但我从未见过将 SaveOptions 更改为无的建议/解决方案。

      您确定该问题的解决方案是将 SaveOptions 设置为无吗?也许您应该提供有关您遇到的错误的详细信息(或提出单独的问题),因为这样的更改会影响您的整个持久层。

      【讨论】:

      • 谢谢 - 正是我提出这个问题的原因,因为它会影响我的整个应用程序来解决这个问题。我不太愿意用我不完全理解的解决方案来做到这一点。当您说 OSM 时,您指的是什么?编辑:对象状态管理器。知道了。 :)
      • 是的,我应该发布一个问题,因为这是另一个声称适用于我的情况的问题中所述的唯一解决方案。但这似乎是完全相同的问题。
      • @morganpdx - 你是如何设置 EF 的?您是使用默认代码生成,还是使用 POCO?如果是这样 - 您是否使用任何更改跟踪(例如自我跟踪实体、代理对象等)。使用此信息和您遇到的错误/场景/问题发布问题。
      • 不,使用默认代码生成。我将在今晚或明天的第一件事上明确发布问题。我怀疑可能有一些虚假实体卡在 OSM 中 - 试图首先测试该理论。
      • 哦,顺便说一句,很好的答案! :)
      猜你喜欢
      • 2016-08-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-16
      相关资源
      最近更新 更多