3
NHibernate要求你的实体属性和方法被标记为虚拟来完成所有的魔法。虽然我不知道NHibernate的内在,这是可以理解的为什么属性必须是虚拟的(这些将通过代理类读取/写入),但... 为什么地球上我的实体方法也必须是虚拟的?为什么NHibernate要求实体方法是虚拟的?
NHibernate要求你的实体属性和方法被标记为虚拟来完成所有的魔法。虽然我不知道NHibernate的内在,这是可以理解的为什么属性必须是虚拟的(这些将通过代理类读取/写入),但... 为什么地球上我的实体方法也必须是虚拟的?为什么NHibernate要求实体方法是虚拟的?
出于同样的原因。如果你的方法不是虚拟的,那么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不要求私有方法是虚拟的。
正确。更重要的是,如果我们做**不** **希望***“NHibernate ......尽其所能”*** - 我们可以让任何财产或方法**非**虚拟 - 然后我们必须改变映射''。所以,无论是代理与虚拟成员 - 或不。 *(不讨论什么更好或适当,只是说:virtual是代理的mut JUST)* –