在NHibernate中加载实体时出现的奇怪错误

时间:2012-12-21 15:59:50

标签: nhibernate clr entities bag

我在尝试加载实体时在NHibernate.Collection.PersistentBag类中遇到错误:

值“MyProject.DomainModel.Operator”不是“MyProject.DomainModel.Operator”类型,不能在此通用集合中使用。

请注意,两种值类型完全相同。我在比较工具中对它们进行了双重检查。

NHibernate无法将值添加到行bag.Add(element)的List集合中。

元素变量实际上是* object {DecoratorAopProxy_9cf850624c7e4ef9a8e2d9694bed26fd} *类型。我注意到可以成功添加到此列表的对象的类型为 object {MyProject.DomainModel.Operator} 。此类型是从VS2012的“类型”列中的“快速监视”功能获得的。

有没有人知道为什么NHibernate会将此特定对象的类型更改为代理,而其他人拥有纯实体类型?

<class name ="PersonRole" table ="tblPersonRole" mutable ="false">
    <id name="Id" column="PersonRoleID" type="Int32" access ="nosetter.lowercase-underscore">
      <generator class="native"/>
    </id>
    <discriminator  formula="case when RoleID in (2,4,5,6) THEN RoleID ELSE 0 END" />
   <subclass discriminator-value="4" name="AccountManagerRole">      
      <bag name="Operators" >
        <key column="OperatorID"></key>
        <one-to-many class="BaseOperator"/>
        <loader query-ref="LoadAllocatedOperators_ACCOUNTMANAGER"/>
      </bag>
    </subclass>
</class>

<class name="BaseOperator" table="tblOperator" lazy="true" >      
    <id name="Id" column="OperatorID" access ="nosetter.lowercase-underscore" type="Int32" unsaved-value="null">
      <generator class="native" />
    </id>
    <discriminator column="OperatorType" type="string"  />
    <subclass discriminator-value ="OPR" name ="Operator" lazy="true">
      <bag name="Customers" access="nosetter.camelcase-underscore" lazy="true" cascade="all-delete-orphan" inverse="true" fetch="join"  >
        <key column="OperatorId" />
            <one-to-many class="MyProject.DomainModel.Customer, MyProject" not-found="ignore" />
        </bag>
        <subclass discriminator-value ="OPR2" name ="Operator2"  lazy="true" />
    </subclass>
</class>

所以我做了类似“从AccountManagerRole accManager 中选择不同的accManager”的操作,这导致运算符一次一个地使用它们的ID加载,并且NHibernate在其中一个上崩溃。

0 个答案:

没有答案