创建与NHibernate和EF 4.1兼容的POCO类

时间:2011-06-03 15:16:45

标签: nhibernate data-modeling poco entity-framework-4.1

我知道NHibernate的POCO类的所有成员都必须定义为虚拟,而在EF(代码优先)中,您只需要将集合/引用对象设置为虚拟以进行延迟加载。

因此,如果我想创建与EF和NH兼容的POCO对象,我应该将我的POCO类的每个成员声明为虚拟吗?

想要这个的原因是我们目前正在评估EF和NHibernate ORM,如果我们最终改变我们的计划,我们不想更新我们的POCO

3 个答案:

答案 0 :(得分:3)

EF需要延迟加载的虚拟导航属性,但它还使用virtual标量/复杂属性进行动态更改跟踪,因此如果您将所有属性标记为virtual,那么这将是正确的方法。

无论如何,你是否提前评估。如果您决定稍后更改ORM,virtual属性将是最小的问题 - 您会发现更难的问题。

答案 1 :(得分:1)

实际上,您并没有被迫在NH中将每个属性声明为虚拟。如果关闭延迟加载行为(默认情况下为'on'),则不再需要声明所有这些“虚拟”,并且可以指定哪些属性是延迟加载的。

所以,如果你愿意,你可能有一个POCO只有NH和EF中的虚拟引用对象。

旁注:无论如何,只是为了努力,我会将所有属性声明为虚拟并完成它:)

答案 2 :(得分:1)

或者,如果你为POCO创建一个接口或抽象基础,你可以使用NHibernate中的<class name="MyPoco" proxy="IMyPoco"/>属性,这也消除了对虚拟属性的需要,因为NH然后推迟从代理创建它的子类而不是直接从你的POCO。

相关问题