Обычно это происходит, когда NH потерял постоянную информацию о коллекции. Предполагается, что вы изменили всю коллекцию. Для эффективного обновления базы данных она удаляет все элементы в одном запросе (удалить ..., где customer = 5) и вставляет новые элементы.
Вы, вероятно, не возвращаете коллекцию, предоставленную NH.
Типичная ошибка:
IList<Contact> Contacts
{
get { return contacts; }
// wrong: creates a new List and replaces the NH persistent collection
set { contacts = value.ToList(); }
}
Кстати, вы должны сделать коллекцию обратной, поскольку это избыточность для контакта. Отношение к клиенту:
<bag name="Contacts" cascade="all-delete-orphan" table="CustomerContact" inverse="true">
<key column="Customer" not-null="true" />
<many-to-many class="Contact"/>
</bag>