Странная ошибка при загрузке сущностей в NHibernate

Я получаю сообщение об ошибке в классе NHibernate.Collection.PersistentBag при попытке загрузить объекты:

Значение "MyProject.DomainModel.Operator" не относится к типу "MyProject.DomainModel.Operator" и не может использоваться в этой универсальной коллекции.

Обратите внимание, что оба типа значений одинаковы. Я дважды проверил их в инструменте сравнения.

NHibernate не может добавить значение в коллекцию List в строке bag.Add(element) .

Переменная элемента на самом деле имеет тип *object{DecoratorAopProxy_9cf850624c7e4ef9a8e2d9694bed26fd}*. Я заметил, что объекты, которые могут быть успешно добавлены в этот список, имеют тип объекта {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>

Поэтому я делаю что-то вроде "выбрать отличный accManager из AccountManagerRole accManager", в результате чего операторы загружаются по одному с использованием их идентификатора, и NHibernate падает на одном из них.

0 ответов

Другие вопросы по тегам