我正在寻找解决我问题的方法,但我得到的是这种情况发生的原因,而不是防止发生这种情况。
我有一个类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过度使用并尝试映射/代理此属性。感觉这应该只是我不想映射的属性的属性...
我怎样才能做到这一点?
由于
森
答案 0 :(得分:8)
NHibernate需要覆盖所有公共,受保护和内部方法,否则代理无法工作(代码可能会访问尚未初始化的代理)。
我看不出您的属性无效的原因,但您的方法错误很明显,错过了virtual
关键字。
答案 1 :(得分:0)
您必须使用虚拟关键字。这就是Nhibernate的工作方式。而且此页面也将为您提供帮助。