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