5

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

我有一个类,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 IWorkflowActivityInstanceTransition GetCurrentState()
{
    return Transitions.OrderBy(q => q.TransitionTimeStamp).LastOrDefault();
}

但我得到一个非常相似的:

NHibernate.InvalidProxyTypeException:NHibernate.InvalidProxyTypeException:以下类型不能用作代理:FB.SimpleWorkflow.NHibernate.Model.WorkflowActivityInstance:方法 GetCurrentState 应该是“公共/受保护的虚拟”或“受保护的内部虚拟”。

我想CurrentState在我的模型类中保留非常简单的行为,并防止 NHibernate 超出自身范围并尝试映射/代理此属性。感觉这应该只是我不想映射的属性的一个属性......

我怎样才能做到这一点?

4

2 回答 2

13

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

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

于 2013-05-22T05:54:11.380 回答
0

您必须使用virtual关键字。这就是 Nhibernate 的工作方式。这个页面也会帮助你。

Github nhibernate/nhibernate-core

于 2018-10-02T07:50:15.423 回答