我从 Entity Framework 4.3.1 中得到了这个异常(顺便说一下,来自在 Visual Studio 2010 中针对 .NET 4 构建的 ASP .NET MVC 3 Web 应用程序):
System.InvalidOperationException:对数据库的更改已成功提交,但在更新对象上下文时发生错误。ObjectContext 可能处于不一致的状态。内部异常消息:无法将对象添加到对象上下文。对象的 EntityKey 有一个 ObjectStateEntry,表明该对象已经参与了不同的关系。
我做了一些谷歌搜索,然后我来到了这个(在 msdn 上):
保存时出现 InvalidOperationException
在那个 Jeff Derstadt (接受的答案)中说:
然后,当您调用 SaveChanges 时,上下文会保留更改,然后尝试修复状态条目。当它这样做时,它会执行“密钥修复”,将临时 EntityKeys 转换为完整的 EntityKeys。在这种情况下,临时密钥 TKP2 现在将等于 P2 的密钥。上下文尝试将状态管理器中的密钥条目“提升”为完整的实体条目,并在此过程中修复图形。这是因为存在冲突而发生异常的地方:P1.Spouse = P2,因此 P2.Spouse 应该 = P1,但由于添加了项目,P2.Spouse 已经等于 P3,并且 EntityReference 不能有多个值。
我在这里以一种“肮脏”的方式思考,所以我的问题是......
因为我并不真正关心保存更改后对象图的样子(这是我的请求的结束,所以无论如何都被丢弃了)并且数据已被插入(当我在 SQL Server 中查看它时实际上完全没问题在我让它在调试器中继续运行之后) - 有没有办法告诉实体框架不要执行此步骤(因此不会出现此异常,并且可能也节省了一些时间)?