NHibernate Множество ко многим сопоставлениям с дополнительными столбцами в таблице сопоставлений

Существуют две таблицы Person и Address. У меня есть таблица сопоставления PersonAddressMap, которая содержит дополнительный столбец IsCurrent, отличный от двух внешних ключей (без явного столбца первичного ключа). Я создал три класса отображения по одному для Person, Address и PersonAddressMap. Мне нужно получить доступ ко всем Адресам Лица, а также получить доступ ко всем Лицам, у которых есть конкретный адрес из Адреса, поэтому у меня есть PersonAdressMap один-ко-многим в классе Person и Address. Теперь проблема двунаправленная ассоциация создает бесконечное число. Если я удалю одну из ассоциаций, загрузка будет работать нормально, но Save не будет вставляться в таблицу сопоставления (например: если у меня есть только одна ассоциация от Person to PersonAddressMap и попытайтесь вставить нового человека с новым адресом, тогда только Person вставлен.). Файлы сопоставления выглядят следующим образом:

<class name="Person" table="Person"> <id name="Id"> <column name="Id" sql-type="int" not-null="true" /> <generator class="identity" /> </id> <property name="Name" column="Name"/> <bag name="AddressDetails" table="PersonAddressMap" cascade="all" > <key column="PersonId" /> <one-to-many class="PersonAddressMap" /> </bag> </class> <class name="Address" table="Address"> <id name="Id"> <column name="Id" sql-type="int" not-null="true" /> <generator class="identity" /> </id> <property name="City" column="City"/> <bag name="PersonDetails" table="PersonAddressMap" cascade="all" > <key column="AddressId" /> <one-to-many class="PersonAddressMap" /> </bag> </class> <class name="Job" table="Job" lazy="false"> <composite-id> <key-many-to-one column="PersonId" name="Person" /> <key-many-to-one column="AddressId" name="Address" /> </composite-id> <property name="IsCurrent" column="IsCurrent"/> </class> 

Заранее спасибо.

отношения «многие ко многим» ВСЕГДА требуют, чтобы вы отметили одну конечную точку отношения с обратным. В вашем конкретном примере вы можете использовать AddressDetails of Person. например

 <bag name="AddressDetails" table="PersonAddressMap" cascade="all" inverse="true"> <key column="PersonId" /> <one-to-many class="PersonAddressMap" /> </bag> 

Когда я использую inverse = 'true', значения таблицы соединений (т.е. PersonAddressMap) не вставлены.

Если я устанавливаю inverse = 'false', они встают, но я также вижу, что инструкции delete встречаются в sql

Interesting Posts

Как группировать по неделям?

Перемещение баз данных и логинов на другой сервер SQL Server 2012

EF 6 Code First __MigrationHistory по схеме dbo по умолчанию

Как сделать глубокую копию набора данных и изменить ссылки FK на все копии?

Sql Server Вставить запрос В несколько таблиц из временных таблиц

Добавить поле ItemTemplate внутри сетки gridview

Как разбирать строку и создавать из нее несколько столбцов?

Вставка и выбор в одной таблице одновременно

Доступ к псевдониму в SQL Server 2012

Должен ли я включать все мои столбцы из выбранного в моем индексе?

Ошибка членства ASP.NET

Срок таймаута семафора истек при восстановлении файла .bak в SQL Server Management Studio

Удаление пробелов между двумя строками

Лучше ли сортировать данные на уровне приложения или с помощью предложения order?

Как я могу найти все вхождения определенного текста во всех хранимых процедурах в моей базе данных?

Давайте будем гением компьютера.