我正在尝试解决与此处概述的错误类似的错误:
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
答案 0 :(得分:18)
的简短修正
SaveOptions.DetectChangesBeforeSave:这是默认值。当你这样做 ObjectContext.SaveChanges(),调用DetectChanges()方法 OSM中的同步附加实体。
SaveChanges是SaveChanges(SaveOptions optsions)
方法的重载版本,此无参数版本调用此方法
SaveChanges(SaveOptions.DetectChangesBeforeSave | SaveOptions.AcceptAllChangesAfterSave)
SaveOptions是一个标记枚举,最后,SaveOptions.DetectChangesBeforeSave | SaveOptions.AcceptAllChangesAfterSave
是SaveChanges()
的默认值,而不是DetectChangesBeforeSave
答案 1 :(得分:17)
简而言之(根据我的理解):
SaveOptions.DetectChangesBeforeSave
:这是默认设置。执行ObjectContext.SaveChanges()时,将调用方法DetectChanges()以在OSM中同步附加实体。
SaveOptions.AcceptAllChangesAfterSave
:执行ObjectContext.SaveChanges()时,调用方法AcceptAllChanges() - 这是OSM的内核,其中图中的实体被迭代,地址和设置为不变/拆卸。
SaveOptions.None
:执行ObjectContext.SaveChanges()时,会立即保存更改 - 根本不会同步。无论图表中的内容是什么都将被保存。
根据我的经验,我没有改变这个 - 我把它作为默认值(DetectChangesBeforeSave)。
有时使用POCO我听说你需要明确地调用DetectChanges
,但我从未见过将SaveOptions更改为none的推荐/解决方案。
您确定该问题的解决方案是将SaveOptions设置为none吗?也许你应该提供关于你得到的错误的细节(或问一个单独的问题),因为这样的改变会影响你的整个持久层。