Здравствуйте, Aviator, Вы писали:
A>Спасибо за разъяснение. А как NHibernate узнает, какие именно поля были изменены со времени последнего апдейта в рамках одной сессии?
Сессия хранит снапшоты объектов (по сути, значения свойств) и при сохранении сравнивает с тем, что фактически есть в объекте. Если интересно, обратите внимание на IInterceptor.OnFlushDirty:
public bool OnFlushDirty(object entity, object id, object[] currentState,
object[] previousState, string[] propertyNames, IType[] types)
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Здравствуйте, Нахлобуч, Вы писали:
Н>Здравствуйте, Aviator, Вы писали:
A>>Спасибо за разъяснение. А как NHibernate узнает, какие именно поля были изменены со времени последнего апдейта в рамках одной сессии?
Н>Сессия хранит снапшоты объектов (по сути, значения свойств) и при сохранении сравнивает с тем, что фактически есть в объекте. Если интересно, обратите внимание на IInterceptor.OnFlushDirty:
Н>Н>public bool OnFlushDirty(object entity, object id, object[] currentState,
Н> object[] previousState, string[] propertyNames, IType[] types)
Н>
Это выходит, что если имеет приличное дерево объектов, в памяти приходиться держать дубль всего дерева...
Здравствуйте, Aviator, Вы писали:
A>Это выходит, что если имеет приличное дерево объектов, в памяти приходиться держать дубль всего дерева...
Ну если понимать, что ORM-средства вообще не предназначены для объемных операций (типа, обновить пару полей в гигабайтной таблице), то все вполне пристойно.
Можно еще переключить сессию в режим Read-only.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>