Re[7]: Data Access Layer и Model Layer
От: Нахлобуч Великобритания https://hglabhq.com
Дата: 21.09.07 05:23
Оценка:
Здравствуйте, 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>>
HgLab: Mercurial Server and Repository Management for Windows
Re[8]: Data Access Layer и Model Layer
От: Aviator  
Дата: 22.09.07 06:37
Оценка:
Здравствуйте, Нахлобуч, Вы писали:

Н>Здравствуйте, Aviator, Вы писали:


A>>Спасибо за разъяснение. А как NHibernate узнает, какие именно поля были изменены со времени последнего апдейта в рамках одной сессии?


Н>Сессия хранит снапшоты объектов (по сути, значения свойств) и при сохранении сравнивает с тем, что фактически есть в объекте. Если интересно, обратите внимание на IInterceptor.OnFlushDirty:


Н>
Н>public bool OnFlushDirty(object entity, object id, object[] currentState, 
Н>    object[] previousState, string[] propertyNames, IType[] types)
Н>


Это выходит, что если имеет приличное дерево объектов, в памяти приходиться держать дубль всего дерева...
Re[9]: Data Access Layer и Model Layer
От: Нахлобуч Великобритания https://hglabhq.com
Дата: 24.09.07 07:29
Оценка:
Здравствуйте, Aviator, Вы писали:

A>Это выходит, что если имеет приличное дерево объектов, в памяти приходиться держать дубль всего дерева...


Ну если понимать, что ORM-средства вообще не предназначены для объемных операций (типа, обновить пару полей в гигабайтной таблице), то все вполне пристойно.

Можно еще переключить сессию в режим Read-only.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
HgLab: Mercurial Server and Repository Management for Windows
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.