不同的EF 4 SaveOptions对ObjectContext有什么影响?

mor*_*pdx 31 entity-framework-4

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

在.NET实体框架中调用SaveChanges时出现InvalidOperationException

似乎解决方案(我还没有尝试过),将System.Data.Objects.SaveOptions.None作为SaveChanges()方法的SaveOptions参数传递.

所以在我这样做之前,我试图准确理解不同的SaveOptions是如何工作的(None,AcceptAllChangesAfterSave,DetectAllChanges).然而,我无法找到明确的解释,也不确定默认是什么.任何人都可以澄清吗?

谢谢!

更新: 我在这里发布了实际问题:尝试使用EF 4迭代添加对象时出现System.InvalidOperationException

小智 18

短暂的纠正

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

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

SaveChanges(SaveOptions.DetectChangesBeforeSave | SaveOptions.AcceptAllChangesAfterSave)
Run Code Online (Sandbox Code Playgroud)

SaveOptions是一个Flag枚举,总的来说,SaveOptions.DetectChangesBeforeSave | SaveOptions.AcceptAllChangesAfterSave默认值SaveChanges()不是DetectChangesBeforeSave


RPM*_*984 17

简而言之(根据我的理解):

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

SaveOptions.AcceptAllChangesAfterSave:当你做ObjectContext.SaveChanges() ,该方法AcceptAllChanges()被调用-这是OSM,在图中的实体迭代,地址和设置不变/独立的胆量.

SaveOptions.None:当您执行ObjectContext.SaveChanges()时,会立即保存更改 - 根本不同步.无论图中的是什么,都将保存.

根据我的经验,我没有改变这个 - 我把它作为默认值(DetectChangesBeforeSave).

有时使用POCO我听说你需要明确调用DetectChanges,但我从未见过将SaveOptions更改为none的推荐/解决方案.

您确定该问题的解决方案是将SaveOptions设置为none吗?也许你应该提供关于你得到的错误的细节(或问一个单独的问题),因为这样的改变会影响你的整个持久层.