nhibernate和虚拟类属性?

时间:2009-05-11 13:31:23

标签: .net nhibernate

只是阅读有关nHibernate的内容,为什么类属性必须是虚拟的?

背后的原因是什么?

3 个答案:

答案 0 :(得分:18)

我建议你阅读Must Everything Be Virtual With NHibernate?

  

该问题的快速答案是:   因为我们需要成员是虚拟的   为了做我们的延迟加载   魔法/伏都

     

答案越长越有趣   虽然。任何一个重要的特征   真正的ORM必须具有透明的Lazy   加载。如果您检索对象   通过ORM,你不希望它   自动拉入整个对象   图表(无论如何不是默认),但是你   不想乱丢你的代码   检查是否有某些关联   已加载,然后加载   如有必要,他们。这是ORM的   责任。理想情况下,你想要   能够访问属性并拥有   ORM加载必要的数据   首先访问这些属性,如果   尚未检索到数据。

答案 1 :(得分:6)

正如安德鲁所说,属性是虚拟的,可以触发延迟加载。以下是对原因的解释:在运行时,NHibernate会将代理对象替换为您的不动产对象。访问它们后,代理对象知道如何为您获取真实对象。将属性标记为虚拟允许此替换发生。

答案 2 :(得分:0)

如果您未使用上述提到的非虚拟方法,则只需添加以下代码段的SetProperty

 NHibernate.Cfg.Configuration cfg = new NHibernate.Cfg.Configuration().SetProperty(NHibernate.Cfg.Environment.UseProxyValidator, Boolean.FalseString)

这只是关闭了导致错误的验证,请确保您未使用非虚拟方法,因为NHibernate将无法代理它们(如原始错误所建议)。