Связи ссылок не сопоставлены - коллекция объектов, сопоставленных таблицей в соответствии со стратегией подкласса

У меня проблемы с отображением NHibernate, и я не уверен, сделал ли я ошибку noob или столкнулся с ограничением NHibernate

У меня есть три объекта домена с соответствующими файлами сопоставления hbm.xml
Человек
Особенный человек
PersonCategory

public class Person
{
    public virtual int Id { get; set; }
    public virtual string Name { get; set; }
}

<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
  <class name="Person"
         table="Person">
    <id name="Id" column="PersonID">
      <generator class="native" />
    </id>
    <property name="Name" />
  </class>
</hibernate-mapping>

SpecialPerson происходит от Person

public class SpecialPerson : Person
{
    public virtual string MagicString { get; set; }
    public virtual PersonCategory PersonCategory { get; set; }
}

<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
  <joined-subclass name="SpecialPerson"
                   extends="Person">
    <key column="PersonID" />
    <property name="MagicString" />
    <many-to-one name="PersonCategory" column="PersonCategoryID" cascade="save-update" />
  </joined-subclass>
</hibernate-mapping>

и PersonCategory содержит коллекцию SpecialPersons <== это то, что вызывает у меня горе

public class PersonCategory
{
    public virtual int Id { get; set; }
    public virtual ICollection<SpecialPerson> Persons { get; set; } 
}

<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
  <class name="PersonCategory"
         table="PersonCategory">
    <id name="Id" column="PersonCategoryID">
      <generator class="native" />
    </id>
    <set name="Persons" table="SpecialPerson" inverse="true">
      <key column="PersonCategoryID" />
      <one-to-many class="SpecialPerson"/>
    </set>
  </class>
</hibernate-mapping>

Когда я пытаюсь создать сеанс, я получаю NHibernate.MappingException, говорящее "Ассоциация ссылается на не сопоставленный класс: SpecialPerson"

Либо я не использую правильный синтаксис, так как я не должен указывать атрибут таблицы, но что-то еще, когда я пытаюсь ссылаться на производный тип ИЛИ
NHibernate не позволяет объекту содержать коллекцию производного типа, если этот производный тип не отображается в таблице в соответствии с конкретной стратегией отображения наследования классов. Кто-нибудь может просветить меня?

1 ответ

Я смог найти ответ здесь

Итак, в итоге, это не имеет ничего общего с тем фактом, что я пытался ссылаться на производный тип. Атрибуту класса в элементе набора "один ко многим" требовалось полностью подписанное имя. Так что это работает

<set name="Persons" table="SpecialPerson">
  <key column="PersonCategoryID" />
  <one-to-many class="NHibernateTest.Domain.Test.SpecialPerson, NHibernateTest, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"/>
</set>

Я понятия не имею, почему в этом случае ему понадобилось полностью подписанное имя, когда я использовал упрощенное имя везде без проблем.

Так что это не было ограничением с NHIbernate, что было большим облегчением, так как я размышлял о сомнительной задаче переписывания многих наших существующих отображений.

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