c#-4.0 - 我是否需要将 RowVersion TimeStamp 类型属性 "Entity Framework Code First"添加到 Parent 和 Child 类?

标签 c#-4.0 concurrency entity-framework-4.1 ef-code-first

我的问题是我是否应该在每个 我的领域模型中的实体。 例如:我有一个 Order 类和一个 OrderDetails“导航、引用”属性, 我应该为两个实体使用 RowVersion 属性,还是对父对象足够?

这些类是 pocos,旨在与 Entity Framework 代码优先方法一起使用。

谢谢。

最佳答案

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

因为几乎总是有可能有 Order没有任何OrderDetail s,你是对的,父对象应该有 RowVersion属性。

是否可以修改 OrderDetail 没有也修改 Order ?应该是吗?

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

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

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

也就是说:如果您加载 Order及其 OrderDetail进入相同的上下文,修改 OrderDetail ,并保存更改, Entity Framework 还可能检查并更新 OrderRowVersion ,即使您实际上没有更改 Order ,导致虚假并发异常。这已被标记为错误,并且 hotfix可用,或者您可以安装 .NET Framework 4.5(当前以候选版本形式提供),即使您的应用程序使用 .NET 4.0,它也可以修复该问题。

关于c#-4.0 - 我是否需要将 RowVersion TimeStamp 类型属性 "Entity Framework Code First"添加到 Parent 和 Child 类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9259290/

相关文章:

c# - Action<T1, T2> 和传递多个参数时出现问题

c# - WPF中的样式仅当针对文本 block 时,也会自动将相同样式应用于按钮内容

c#-4.0 - 用于访问文本文件的存储库模式

c# - Linq 在不访问远程数据库的情况下检查子查询是否为空

multithreading - NSOperation 子类中的 NSTimer

java - 为什么创建了一个JFrame对象并设置为可见后,程序还没有结束执行?

java - 了解 wait() 和 notify() 方法

sql-server - 从 DbContext 执行存储过程

c# - 列 ID 在规范中出现多次?

asp.net-mvc-4 - MVC 4 从实体创建类