Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net nhibernate和虚拟类属性?_.net_Nhibernate - Fatal编程技术网

.net nhibernate和虚拟类属性?

.net nhibernate和虚拟类属性?,.net,nhibernate,.net,Nhibernate,只要阅读有关nHibernate的内容,为什么类属性必须是虚拟的 这背后的原因是什么?我建议你读一读 这个问题的快速答案是: 因为我们需要虚拟的成员 为了完成我们的延迟加载 魔法/巫毒 答案越长越有趣 不过。这是任何 真正的ORM必须是透明的 加载。如果您检索一个对象 通过ORM,你不希望它 自动拉入整个对象 图形(无论如何不是默认的),但是 我不想浪费你的代码 检查是否存在某些关联 已经加载,然后加载 如有必要,请联系我们。这是ORM的 责任。理想情况下,你想要 能够访问属性并拥有 ORM将加

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

这背后的原因是什么?

我建议你读一读

这个问题的快速答案是: 因为我们需要虚拟的成员 为了完成我们的延迟加载 魔法/巫毒

答案越长越有趣 不过。这是任何 真正的ORM必须是透明的 加载。如果您检索一个对象 通过ORM,你不希望它 自动拉入整个对象 图形(无论如何不是默认的),但是 我不想浪费你的代码 检查是否存在某些关联 已经加载,然后加载 如有必要,请联系我们。这是ORM的 责任。理想情况下,你想要 能够访问属性并拥有 ORM将加载必要的数据 在以下情况下首次访问这些属性: 数据尚未检索到


正如Andrew所说,属性是虚拟的,可以触发延迟加载。下面解释一下为什么会这样:在运行时,NHibernate将用代理对象替换您的不动产对象。一旦被访问,代理对象就知道如何为您获取真实对象。将属性标记为虚拟可以进行此替换。

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

 NHibernate.Cfg.Configuration cfg = new NHibernate.Cfg.Configuration().SetProperty(NHibernate.Cfg.Environment.UseProxyValidator, Boolean.FalseString)
这只会关闭导致错误的验证,请确保您没有使用非虚拟方法,因为NHibernate将无法代理它们(如原始错误所示)