防止NHibernate映射属性到代理

时间:2013-05-20 13:41:47

标签: nhibernate

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

我有一个类WorkflowActivityInstance,其中包含WorkflowActivityInstanceTransitions的集合,表示工作流状态的转换。转换以Transitions属性映射。

因此:WorkflowActivityInstance< - WorkflowActivityInstanceTransition

我想要一个关于对象的视图,它会给WorkflowActivityInstance状态包括它的当前状态,这只是最新的WorkflowActivityInstanceTransition而没有用户编码器来执行他们自己的排序和选择在Transitions财产上。

最初,我有:

public virtual IWorkflowActivityInstanceTransition CurrentState
{
    get { return Transitions.OrderBy(q => q.TransitionTimeStamp).LastOrDefault(); }
}

但我得到:

  

NHibernate.InvalidProxyTypeException:   NHibernate.InvalidProxyTypeException:以下类型可能不是   用作代理:   FB.SimpleWorkflow.NHibernate.Model.WorkflowActivityInstance:方法   CurrentState应该是'public / protected virtual'或'protected   内部虚拟'。

我试图变得厚脸皮并将其转换为方法:

public IWorkflowActivityInstanceTransition GetCurrentState()
{
    return Transitions.OrderBy(q => q.TransitionTimeStamp).LastOrDefault();
}

但我得到的非常相似:

  

NHibernate.InvalidProxyTypeException:   NHibernate.InvalidProxyTypeException:以下类型可能不是   用作代理:   FB.SimpleWorkflow.NHibernate.Model.WorkflowActivityInstance:方法   GetCurrentState应为“public / protected virtual”或“protected”   内部虚拟'。

我想在我的模型类中保持CurrentState的非常简单的行为,并防止NHibernate过度使用并尝试映射/代理此属性。感觉这应该只是我不想映射的属性的属性...

我怎样才能做到这一点?

由于

2 个答案:

答案 0 :(得分:8)

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

我看不出您的属性无效的原因,但您的方法错误很明显,错过了virtual关键字。

答案 1 :(得分:0)

您必须使用虚拟关键字。这就是Nhibernate的工作方式。而且此页面也将为您提供帮助。

Github nhibernate/nhibernate-core