Как NHibernate реализует отслеживание изменений?

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

11
задан Alice 28 May 2010 в 07:40
поделиться

2 ответа

Он основан на снапшотах.

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

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

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

16
ответ дан 3 December 2019 в 03:51
поделиться

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

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

Отслеживание изменений в сессии в целом более эффективно, но если вы отсоедините сущность от сессии, вы потеряете отслеживание изменений.

10
ответ дан 3 December 2019 в 03:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: