lazy ="false"对NHibernate映射的类元素有什么影响?

Bri*_*van 10 .net nhibernate lazy-loading

我正在使用遗留系统,我正在尝试添加NHibernate.我有一个类,我需要映射到一个表,但它有许多非虚拟的现有方法.

我发现如果我将映射文件的class元素的"lazy"属性设置为"false",即使使用非虚方法,我也可以使NHibernate成功加载映射.我想知道这会对我在这个类中使用NHibernate产生什么影响.

我理解属于一个对象的集合上非延迟加载的含义,但我不清楚类的延迟或急切加载的含义.这是否意味着属于该对象的所有集合都会急切加载?或者它是否意味着NHibernate不再使用动态代理来代替实际的类?别的什么?

此外,这里最好的行动方案是什么?设置lazy = false值是不可取的?我应该创建该类实现的接口,然后将其映射到表吗?或者我应该咬紧牙关并在虚拟类上标记所有现有方法?

提前感谢任何和所有的建议!

Fre*_*els 5

我总是在 NHIbernate 的类级别上指定 lazy=false,因为我不希望 NHibernate 强迫我声明属性是虚拟的,如果我不想在我的类模型中这样做。

当您在类映射中指定“lazy”(默认)时,NHibernate 在运行时使用“Dynamic Proxy”类。此动态代理是从您的类继承的类。然后,据我所知,类的实例应该延迟/按需初始化。在某些情况下,这应该对性能更好(至少,这是被告知的)。

但是,因为我不喜欢 NHibernate 告诉我我的类应该是什么样子,所以我总是为我的所有类指定 lazy=false,而且我还没有遇到麻烦。:)