2012-02-13 39 views

回答

4

答案与往常一样,“取决于”。

由于几乎总是可以有一个Order没有任何OrderDetail s,你是对的,父对象应该有一个RowVersion财产。

是否有可能修改OrderDetail没有也修改Order?它应该是?

如果这是不可能的,不应该是,在详细级别的RowVersion属性不会添加任何内容。您已经通过检查OrderRowVersion找到了所有可能的修改。在这种情况下,只能在顶层添加属性,并停止阅读。

否则,如果两个独立的上下文加载相同的顺序和细节,两者都修改不同的OrderDetail,并且都试图保存,您是否想将此视为冲突?在某些情况下,这是有道理的。在其他情况下,它不会。若要将其视为冲突,最简单的解决方案实际上标记为已更改,如果它未更改(使用ObjectStateEntry.SetModified,而不是ObjectStateEntry.ChangeState),也会修改为已修改。 EF将检查并更新OrderRowVersion财产,并投诉其他人是否做出任何修改。

如果您确实想要允许两个独立的上下文修改相同的Order中的两个不同的OrderDetail,那么您需要详细级别的RowVersion属性。

这就是说:如果您加载Order及其OrderDetail S插入相同的情况下,修改OrderDetail,并保存更改,实体框架还可以检查和更新OrderRowVersion,即使你不'实际上改变了Order,导致虚假并发异常。这已被标记为一个错误,并且有一个hotfix可用,或者您可以安装.NET Framework 4.5(当前可用于候选版本表单),即使应用程序使用.NET 4.0,也可以修复该错误。

+0

谢谢你的答案hvd。这也是我的想法。我认为应该有OrderDetails修改而不更改订单。但是,正如我可以看到那里不会是任何没有订单的上下文,所以更改OrderDetail(s)并发送Order - > OrderDetails,EF应该进行适当的检查并更改RowVersion :) – 2012-02-15 11:38:13

+0

@hvd:我希望我可以说“你救了我的一天”:-)但是,谢谢 – agibalov 2012-04-02 07:59:48

相关问题