C# 4.0 我是否需要添加RowVersion时间戳类型属性";“实体框架代码优先”;到父类和子类?

C# 4.0 我是否需要添加RowVersion时间戳类型属性";“实体框架代码优先”;到父类和子类?,c#-4.0,concurrency,entity-framework-4.1,ef-code-first,C# 4.0,Concurrency,Entity Framework 4.1,Ef Code First,我这里的问题是,是否应该在每个 我的域模型中的实体。 例如:我有一个Order类和一个OrderDetails“navigation,reference”属性, 我应该为这两个实体使用RowVersion属性,还是对父对象使用它就足够了 这些类是POCO,用于实体框架代码优先的方法 谢谢。答案通常是“视情况而定” 由于几乎总是可以有一个Order而没有任何OrderDetails,因此父对象应该有一个RowVersion属性 是否可以在不修改订单的情况下修改订单详情?应该是吗 如果不可能也不应该

我这里的问题是,是否应该在每个 我的域模型中的实体。 例如:我有一个Order类和一个OrderDetails“navigation,reference”属性, 我应该为这两个实体使用RowVersion属性,还是对父对象使用它就足够了

这些类是POCO,用于实体框架代码优先的方法

谢谢。

答案通常是“视情况而定”

由于几乎总是可以有一个
Order
而没有任何
OrderDetail
s,因此父对象应该有一个
RowVersion
属性

是否可以在不修改订单的情况下修改订单详情?应该是吗

如果不可能也不应该这样做,则详细级别的
RowVersion
属性不会添加任何内容。您已经通过检查
订单
行版本
捕获了所有可能的修改。在这种情况下,只在顶层添加属性,并停止在此处读取

否则,如果两个独立的上下文加载相同的顺序和详细信息,它们都修改不同的
OrderDetail
,并且都尝试保存,是否将其视为冲突?在某些情况下,这是有道理的。在其他情况下,情况并非如此。要将其视为冲突,最简单的解决方案是,如果
订单未更改,则实际将其标记为已修改(使用
ObjectStateEntry.SetModified
,而不是
ObjectStateEntry.ChangeState
)。EF将检查并更新
订单
行版本
属性,如果其他人进行了任何修改,EF将进行投诉

如果您确实希望允许两个独立的上下文修改相同
顺序的两个不同的
OrderDetail
s,是的,您需要在详细级别上使用
RowVersion
属性


这就是说:如果您将一个
订单及其
订单详细信息
加载到相同的上下文中,修改一个
订单详细信息
,并保存您的更改,实体框架还可以检查并更新
订单的
行版本
,即使您实际上没有更改
订单
,导致伪并发异常。这已被标记为错误,并且可用,或者您可以安装.NET Framework 4.5(当前以候选发行版形式提供),即使您的应用程序使用.NET 4.0,它也可以修复此问题。

谢谢您的回答。这些也是我的想法。我认为应该在不改变订单的情况下修改OrderDetails。但正如我所看到的,没有订单就不会有任何上下文,因此更改订单详细信息并发回订单->订单详细信息,EF应该进行适当的检查并更改行版本:)@hvd:我希望我能说“你救了我的一天”:-)不过,谢谢