为什么NHibernate要求实体方法是虚拟的?

时间:2015-05-19 21:42:30

标签: nhibernate

NHibernate要求将您的实体属性和方法标记为虚拟,以实现其所有魔力。

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

1 个答案:

答案 0 :(得分:6)

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

请考虑以下代码:

public class A 
{
   private int _a;
   public virtual int A 
   { 
     get { return _a; }
     set { _a = value; } 
   }

   public void DoSomethingWithA() 
   {
       Console.WriteLine(_a);
   }
}

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

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