防止NHibernate属性映射到代理

防止NHibernate属性映射到代理,nhibernate,Nhibernate,我正在四处寻找解决问题的方法,但我得到的只是发生这种情况的原因,而不是防止这种情况发生 我有一个类,WorkflowActivityInstance,它有一个WorkflowActivityInstanceTransitions的集合,表示工作流状态的转换。转换映射到transitions属性fine中 因此:WorkflowActivityInstanceNHibernate需要覆盖所有公共、受保护和内部方法,否则代理无法工作(您的代码可能会访问尚未初始化的代理) 我看不出您的属性不起作用的原

我正在四处寻找解决问题的方法,但我得到的只是发生这种情况的原因,而不是防止这种情况发生

我有一个类,
WorkflowActivityInstance
,它有一个
WorkflowActivityInstanceTransitions
的集合,表示工作流状态的转换。转换映射到
transitions
属性fine中


因此:
WorkflowActivityInstance
NHibernate需要覆盖所有公共、受保护和内部方法,否则代理无法工作(您的代码可能会访问尚未初始化的代理)


我看不出您的属性不起作用的原因,但您的方法的错误非常明显,您错过了
virtual
关键字。

您必须使用virtual关键字。这就是Nhibernate的工作原理。这一页也会对你有所帮助


谢谢。我知道它需要为代理目的覆盖我的成员,特别是为延迟加载目的。但是,这个特定的成员不会被持久化,因此NHibernate没有业务代理它。我明白了吗?我不能在模型中添加模型之外的任何内容,即使是为了方便起见?@Program.X您可以添加任何您想要的属性或方法,它们必须是虚拟的。正如我已经解释过的,NHibernate需要覆盖所有属性和方法,而不仅仅是映射/持久化的属性和方法。
public virtual IWorkflowActivityInstanceTransition CurrentState
{
    get { return Transitions.OrderBy(q => q.TransitionTimeStamp).LastOrDefault(); }
}
public IWorkflowActivityInstanceTransition GetCurrentState()
{
    return Transitions.OrderBy(q => q.TransitionTimeStamp).LastOrDefault();
}