2011-05-06 77 views
0

我在我的.NET 3.5应用程序中使用EF v1和Velocity缓存。我的缓存对象是数据库中实体模型的表示。所以我决定使用EF v1和POCO适配器。所以有一个实体访问层从缓存中读取对象,如果不存在,则从数据库读取并立即缓存。现在在需要更新的用例中,需要在数据库中更新脏POCO。现在我无法直接在这里使用POCO适配器和代理,因为它们需要一个跟踪更改的支持对象。我从来没有从框架中吸取适配器对象,所以更改检测没有发生。我看到的最简单的选项是:实体框架v1和缓存POCO更新

  1. 在更新前阅读实体。设置来自POCO的适配器值。让变化检测顺其自然。这会在每次更新之前进行选择,因为许多关联的实体可能会导致成本高昂。
  2. 创建一个新的实体对象。设置来自POCO的实体键和属性。保存更改。即使属性/关联实体没有被更改,这也会执行不必​​要的写操作。

我希望我在问题陈述中清楚。请建议。

回答

0

实际上结果是1.和2.是一样的。您需要完整地读取实体(以及关联),以确保将分离的对象中的更改转换为实体上下文。这种方法的限制条件是: 1.阅读之前更新 2.陈旧的写入(因为从分离对象的所有属性得到更新,我们最终可能会更新staler值,因为我们没有真正改变我们)

我不认为有任何方法可以避免1.但是,如果2.对您的业务需求至关重要(意味着您无法承担过时的值,请通过“IsChangedProperty”跟踪正在更改的字段,并仅更新这些字段。痛苦,但不幸的是,与分离的对象既没有EF v4也没有v1给你任何休息:(