Поддерживает ли nhibernate-прокси какие-либо умные задания для эффективного отслеживания изменений? Или он поддерживает только то, что Entity Framework вызывает отслеживание изменений на основе моментальных снимков?
Как NHibernate реализует отслеживание изменений?
Ответ 1
Он основан на снимках.
При загрузке объекта его состояние сохраняется в сеансе как объект [].
При промывке текущее состояние преобразуется в объект [] и сравнивается с исходным состоянием, чтобы определить, какие свойства загрязнены.
Это более эффективно по многим причинам. Один из них заключается в том, что вам не нужен прокси-сервер для отслеживания изменений. Другим является то, что если вы установите свойство на другое значение и затем вернете его, объект будет считаться не грязным, что позволит избежать ненужного вызова БД.
Ответ 2
Изменения в NHibernate и EntityFramework изменяются по-разному. Entity Framework отслеживает изменения самой сущности. NHibernate отслеживает изменения в сеансе.
Отслеживание изменений в объекте требует большего объема памяти (поскольку вы сохраняете значения до и после значений). Сущности могут сохранять отслеживание изменений даже после отключения от ObjectContext.
Отслеживание изменений в сеансе более эффективно в целом, но если вы отключите сущность от сеанса, вы потеряете отслеживание изменений.