【问题标题】:Why NHibernate requires the entities methods to be virtual?为什么 NHibernate 要求实体方法是虚拟的?
【发布时间】:2015-05-19 21:42:30
【问题描述】:

NHibernate 需要将您的实体属性和方法标记为虚拟才能发挥其所有魔力。

虽然我不知道 NHibernate 的内部特性,但可以理解为什么属性必须是虚拟的(那些将通过代理类读取/写入),但是...... 到底为什么我的实体方法也必须是虚拟的?

【问题讨论】:

    标签: nhibernate


    【解决方案1】:

    出于同样的原因。如果您的方法不是虚拟的,那么 NHibernate 将无法初始化代理。

    只需考虑以下代码:

    public class A 
    {
       private int _a;
       public virtual int A 
       { 
         get { return _a; }
         set { _a = value; } 
       }
    
       public void DoSomethingWithA() 
       {
           Console.WriteLine(_a);
       }
    }
    

    因此,如果您在调用a.DoSomethingWithA(); 时拥有A 的代理对象,它将访问未初始化的_a 字段。

    为了避免这种情况,为了能够注入代理初始化代码 NHibernate 不需要私有方法是虚拟的。

    【讨论】:

    • 正确。更重要的是,如果我们 NOT 想要 "NHibernate ... to do its all its magic" - 我们可以创建任何属性或方法 non virtual - 然后我们必须更改映射<class ... lazy="false" ... >。因此,要么代理虚拟成员 - 要么不代理。 (不讨论什么更好或更合适,只是说:virtual is a mut JUST for a proxy)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-15
    • 2012-06-29
    • 1970-01-01
    相关资源
    最近更新 更多