.net - 惰性 ="false"对 NHibernate 映射的类元素有什么影响?

标签 .net nhibernate lazy-loading

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

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

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

此外,最好的做法是什么?设置lazy=false值是不可取的吗?我应该创建一个类实现的接口(interface),然后将其映射到表吗?或者我应该硬着头皮将所有现有方法标记为虚拟类?

预先感谢您的任何建议!

最佳答案

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

当您在类映射中指定“lazy”(默认)时,NHibernate 在运行时使用“动态代理”类。该动态代理是一个从您的类继承的类。 然后,据我了解,类的实例应该延迟/按需初始化。 在某些情况下,这应该会更好地提高性能(至少,人们是这么说的)。

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

关于.net - 惰性 ="false"对 NHibernate 映射的类元素有什么影响?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/606488/

相关文章:

c# - 在 NHibernate 的查询中使用 OR 子句

nhibernate - 是什么导致: Unix transport error?

nhibernate - 强制惰性实体加载真实实例

javascript - AngularJS 无限滚动问题

非静态方法的 Java 惰性初始化?

c# - 是否有 LINQ 扩展或(一组合理/高效的 LINQ 扩展)确定集合是否至少有 'x' 个元素?

c# - WCF:将流式处理与消息协定结合使用

.net - 用于 Linux 开发的最佳 Visual-Studio Like 工具

C# 为什么 App.config 在构建后被复制到我的调试和发布文件夹?

javascript - 加载后: check if an image is in the browser cache