У меня есть объект, TrackLog
, который имеет составную часть TrackPoints
. Я создаю новый TrackLog
и добавляю к нему Trackpoints
и сохраняю его в БД.Сохраняет объект с коллекцией компонентов, которая должна выполнять SQL DELETE, а затем INSERT с помощью NHibernate?
Когда я хватаю TrackLog
снова и добавить новый TrackPoint
, вместо того, чтобы делать один SQL INSERT, как я ожидаю, что это делает УДАЛЕНИЕ на всех TrackPoints
, связанных с TrackLog
, а затем повторно добавляя каждый TrackPoint
, который находится в коллекции.
Это выход из NHProf:
UPDATE TrackLog SET Version = 2 etc...
DELETE FROM TrackPoints WHERE TrackLog_Id = '80cc1e0d' etc...
INSERT INTO TrackPoints etc..
INSERT INTO TrackPoints etc...
INSERT INTO TrackPoints etc...
Мой вопрос, это нормальное поведение для сбора компонентов? Это происходит и для моих коллекций enum. Если это не нормальное поведение, как мне изменить мои сопоставления, чтобы он отображал правильное поведение (только один INSERT для добавленного мной TrackPoint
)?
Спасибо, я сам пришел к тому же самому выводу. Другое дело иметь в виду, что ваши компоненты должны переопределять 'Equals()' и 'GetHashCode()', иначе производительность еще хуже (а не один оператор DELETE, он генерирует DELETE для каждого элемента, затем делает INSERT для каждый раз). –
Да, это правильно, и это имеет смысл, потому что у компонентов нет идентификатора, так что это единственный способ (для NH) рассказать им обособленно. –