.net nhibernate和虚拟类属性?
只要阅读有关nHibernate的内容,为什么类属性必须是虚拟的 这背后的原因是什么?我建议你读一读 这个问题的快速答案是: 因为我们需要虚拟的成员 为了完成我们的延迟加载 魔法/巫毒 答案越长越有趣 不过。这是任何 真正的ORM必须是透明的 加载。如果您检索一个对象 通过ORM,你不希望它 自动拉入整个对象 图形(无论如何不是默认的),但是 我不想浪费你的代码 检查是否存在某些关联 已经加载,然后加载 如有必要,请联系我们。这是ORM的 责任。理想情况下,你想要 能够访问属性并拥有 ORM将加载必要的数据 在以下情况下首次访问这些属性: 数据尚未检索到.net nhibernate和虚拟类属性?,.net,nhibernate,.net,Nhibernate,只要阅读有关nHibernate的内容,为什么类属性必须是虚拟的 这背后的原因是什么?我建议你读一读 这个问题的快速答案是: 因为我们需要虚拟的成员 为了完成我们的延迟加载 魔法/巫毒 答案越长越有趣 不过。这是任何 真正的ORM必须是透明的 加载。如果您检索一个对象 通过ORM,你不希望它 自动拉入整个对象 图形(无论如何不是默认的),但是 我不想浪费你的代码 检查是否存在某些关联 已经加载,然后加载 如有必要,请联系我们。这是ORM的 责任。理想情况下,你想要 能够访问属性并拥有 ORM将加
正如Andrew所说,属性是虚拟的,可以触发延迟加载。下面解释一下为什么会这样:在运行时,NHibernate将用代理对象替换您的不动产对象。一旦被访问,代理对象就知道如何为您获取真实对象。将属性标记为虚拟可以进行此替换。如果您没有使用上述非虚拟的方法,只需添加以下代码段的
SetProperty
:
NHibernate.Cfg.Configuration cfg = new NHibernate.Cfg.Configuration().SetProperty(NHibernate.Cfg.Environment.UseProxyValidator, Boolean.FalseString)
这只会关闭导致错误的验证,请确保您没有使用非虚拟方法,因为NHibernate将无法代理它们(如原始错误所示)