【问题标题】:nhibernate and virtual class properties?nhibernate和虚拟类属性?
【发布时间】:2010-10-25 06:55:59
【问题描述】:

刚刚阅读 nHibernate,为什么类属性必须是虚拟的?

这背后的原因是什么?

【问题讨论】:

    标签: .net nhibernate


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

      正如 Andrew 所说,属性是虚拟的以触发延迟加载。这里解释一下为什么会这样: 在运行时 NHibernate 会用代理对象代替你的真实属性对象。一旦它们被访问,代理对象就知道如何为您获取真实对象。将属性标记为虚拟允许发生这种替换。

      【讨论】:

        【解决方案3】:

        如果您没有使用上述非虚拟方法,您可以简单地添加以下sn-p的SetProperty

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-04-22
          • 1970-01-01
          相关资源
          最近更新 更多