У меня есть класс, который содержит коллекцию, сопоставленную с отношением базы данных «многие ко многим» с помощью Fluent Nhibernate. Отображение как показано ниже -
Table("Book");
Id(x => x.Id);
Map(x => x.Title);
Map(x => x.NumberOfPages);
HasManyToMany(x => x.Authors)
.Cascade.AllDeleteOrphan()
.Table("BookAuthor")
.ParentKeyColumn("BookId")
.ChildKeyColumn("AuthorId");
Затем я получаю экземпляр этого класса и добавляю элемент в коллекцию авторов, используя код ниже -
var book = session.CreateCriteria(typeof(Book)).UniqueResult<Book>();
Author author = new Author {Name="Phil Moran",Age=51};
book.Authors.Add(author);
session.SaveOrUpdate(book);
База данных успешно обновлена, но Nhibernate обновляет таблицу BookAuthor, сначала удаляя все записи в ней, связанные с обновленной книгой, а затем повторно заполняет все данные плюс дополнительную запись, необходимую для нового автора. Почему Nhibernate делает это? Я ожидаю, что он просто добавит одну запись, содержащую книгу и сведения об авторе, в таблицу «многие ко многим» (BookAuthor) и не выполнит никаких действий по удалению. Могу ли я изменить это поведение через мои сопоставления?