Должен быть простой ответ на этот вопрос, который я скучаю.Я видел много примеров того, как сделать это в простых отношениях родитель / потомок, но я не уверен, как это сделать, когда есть третья таблица.Я также относительно новичок в NHibernate, поэтому, пожалуйста, держитесь со мной.
У меня есть класс PhoneBook, в котором есть список PhoneNumber.Тогда у меня есть другой класс "Account", который ссылается на PhoneNumber.Эта ссылка может быть недействительной, поэтому учетная запись не должна иметь телефонный номер.
Я хотел бы иметь возможность сохранить телефонную книгу, сохранить / обновить / удалить все телефонные номера, И если таковые имеютсяиз телефонных номеров удалены, я хочу удалить все учетные записи, использующие этот номер.Все работает, кроме последней части;если я удаляю номер телефона, который используется, он также удаляет учетную запись, чего я не хочу, я просто хочу, чтобы он очистил его ссылку.Я уверен, что это просто потому, что мои каскады или отображения неверны, я просто не знаю, как их установить.
Фактический код для сохранения относительно прост.Кстати, если кто-то может сказать мне, почему я должен объединить, чтобы убедиться, что телефонные номера удалены, это было бы здорово.
var session = SessionFactory.GetCurrentSession();
book = (PhoneBookDto) session.Merge(book);
session.SaveOrUpdate(book);
Текущие соответствующие сопоставления:
PhoneBook.hbm.xml
...
<bag cascade="all-delete-orphan" inverse="true" name="PhoneNumbers">
<key>
<column name="phone_book_id" />
</key>
<one-to-many class="DataLibrary.dto.PhoneNumberDto, DataLibrary" />
</bag>
...
PhoneNumber.hbm.xml
...
<many-to-one cascade="none" class="DataLibrary.dto.PhoneBookDto, DataLibrary" name="PhoneBook">
<column name="phone_book_id" />
</many-to-one>
...
Account.hbm.xml
...
<many-to-one cascade="none" class="DataLibrary.dto.PhoneNumberDto, DataLibrary" name="PhoneNumber">
<column name="phone_number_id" />
</many-to-one>
...
Заранее спасибо!
изменить:
Firo указал мне правильное направление, мне пришлось настроить коллекцию на PhoneNumber обратно в Account, хотя она мне на самом деле не нужна, а также установить ее как обратный = false:
<bag cascade="none" inverse="false" name="Accounts">
<key>
<column name="phone_number_id" />
</key>
<one-to-many class="DataLibrary.dto.AccountDto, DataLibrary" />
</bag>
Когда я это сделал, это сработало.Есть ли способ сделать это, чтобы мне не нужно было связывать PhoneNumber с учетной записью?