Как NHibernate реализует отслеживание изменений? - PullRequest
11 голосов
/ 28 мая 2010

Прокси-серверы nhibernate выполняют какую-нибудь умную работу, чтобы сделать отслеживание изменений эффективным? Или он поддерживает только то, что Entity Framework называет отслеживанием изменений на основе снимков?

Ответы [ 2 ]

14 голосов
/ 28 мая 2010

Это на основе снимка.

При загрузке объекта его состояние сохраняется в сеансе как объект [].

При очистке текущее состояние преобразуется в объект [] и сравнивается с исходным состоянием, чтобы определить, какие свойства являются грязными.

Это более эффективно по многим причинам. Одним из них является то, что вам не нужен прокси для отслеживания изменений. Другая причина заключается в том, что если вы установите для свойства другое значение, а затем восстановите его, объект будет считаться незапятнанным, что позволит избежать ненужного вызова БД.

10 голосов
/ 28 мая 2010

NHibernate и EntityFramework отслеживают изменения по-разному.Entity Framework отслеживает изменения в самой сущности.NHibernate отслеживает изменения в сеансе.

Для отслеживания изменений в объекте требуется больше памяти (поскольку вы сохраняете значения до и после).Объекты могут сохранять отслеживание изменений даже после отключения от ObjectContext.

Отслеживание изменений в сеансе в целом более эффективно, но если вы отключите объект от сеанса, вы потеряете отслеживание изменений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...