что именно происходит внутри Nhibernate.ISession saveOrUpdate

#nhibernate #sharp-architecture

#nhibernate #sharp-архитектура

Вопрос:

Я использую архитектуру MVC, NHibernate и Sharp для своего проекта.
Всякий раз, когда я сохраняю объекты (сущности), используя SaveOrUpdate дочерние объекты, которые также обновляются. Но вместо обновления дочерних объектов он выполняется DELETE-INSERT для всех дочерних объектов.

любая помощь.

Комментарии:

1. Как вы изменяете дочерние объекты?

2. Такое поведение возникает, когда вы изменяете свойство collection для объекта, а не изменяете / добавляете элементы в коллекцию. NHibernate видит изменения, происходящие с самим свойством, и выполняет удаление / вставку. Если вы загружаете дочерние элементы и присваиваете их сущности, не делайте этого. Нетерпеливая загрузка или ленивая загрузка.

3. Пожалуйста, не могли бы вы уточнить вопрос. Другим было бы очень сложно помочь с ограниченным описанием

Ответ №1:

Это происходит потому, что вы не обновляете существующие дочерние объекты, вы заменяете всю их коллекцию. Это заставляет Nhibernate думать, что он должен сохранить новую коллекцию.

Комментарии:

1. ДА. это именно то, что происходит. Когда в базе данных дочерних объектов нет данных, он просто делает одну вставку в базу данных. Но когда для дочернего объекта уже доступны данные, он удаляет предыдущие строки, а затем снова вставляет текущие данные.

2. Любое предложение о том, как это можно изменить, чтобы, когда мы когда-либо добавляли новый экземпляр дочернего объекта, он должен только добавлять новую строку вместо удаления предыдущих и повторной вставки.

3. Это потому, что вы назначаете коллекцию. Не назначайте коллекцию, добавьте свой элемент в существующую коллекцию.