尝试加载实体时,我在 NHibernate.Collection.PersistentBag 类中遇到错误:
值“MyProject.DomainModel.Operator”不是“MyProject.DomainModel.Operator”类型,不能在此通用集合中使用。
请注意,这两种值类型完全相同。我已经在比较器工具中仔细检查了它们。
NHibernate 未能将值添加到 line 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 在其中一个上崩溃。