У меня проблема. Представьте себе эту модель данных:
[Person] table has: PersonId, Name1
[Tag] table has: TagId, TagDescription
[PersonTag] has: PersonId, TagId, IsActive
Так как [PersonTag]
- это не просто простая таблица соединений "много-ко-многим", у меня есть все три объекта, созданные в nHibernate (точно так же, как в модели данных). PersonTag
, следовательно, требует составной идентификатор, который я сопоставил с таким классом:
<composite-id name="PersonTagKey" class="PersonTagKey">
<key-property name="PersonId"></key-property>
<key-property name="TagId"></key-property>
</composite-id>
Я хочу пересечь граф объектов и иметь возможность искать объекты Person
и Tag
из полученного объекта PersonTag
. Итак, у меня есть свойства объекта PersonTag
для этого, отображаемого следующим образом:
<many-to-one name="Person" column="PersonId" lazy="proxy" cascade="none" class="Person"/>
<many-to-one name="Tag" column="TagId" lazy="proxy" cascade="none" class="Tag"/>
Когда я пытаюсь создать объект PersonTag
и сохраняю его, я получаю "Недопустимый индекс n для этой ошибки SqlParameterCollection с Count = n". Я знаю, это связано с тем, что я дважды сопоставлял свойства PersonId
и TagId
, один раз для составного идентификатора и один раз для отношения "много-к-одному" . Если я не сопоставляю объекты "много-к-одному" , все работает нормально.
Есть ли какой-то способ для меня иметь составной идентификатор И отношение "много-к-одному" , основанное на том же столбце, смоделированном в одном и том же элементе nHibernate?