Кэш второго уровня Nhibernate не для каскадных ассоциаций? - PullRequest
0 голосов
/ 23 февраля 2012

В объяснении кеша второго уровня на

http://knol.google.com/k/nhibernate-chapter-16-improving-performance#16(2E)3(2E)(C2)(A0)Managing_the_caches

В нем говорится, что: NHibernate автоматически исключит связанные объекты, если сопоставление сопоставлено с помощью cascade = "all" или cascade = "all-delete-orphan".

Зачем мне хотеть, чтобы nhibernate высвобождал кэшированные ассоциации, когда есть каскад?

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

1 Ответ

1 голос
/ 24 февраля 2012

Хорошо, что так работает. Кэширование - это хорошо, но оно должно быть безопасным, чтобы по возможности предотвратить некорректные кэшированные данные.

Подумайте о концепции счета с заголовком и позициями. Заголовок настроен так, чтобы каскадировать все вставки / обновления / удаления в позиции. Таким образом, если вы удалите заголовок, позиции также будут удалены. Это имеет смысл, потому что это составляет одну «Агрегированную сущность» с заголовком, являющимся Агрегированным корнем. Эти позиции сами по себе не имеют истинной идентичности. Если вы сохраняете новый заголовок, вы также хотите сохранить все добавленные позиции. Каскадирование великолепно тем, что он справляется с этим для вас.

Аналогично с точки зрения кэширования, если заголовок изменяется и, следовательно, удаляется из кэша, все элементы строки также должны очищаться, поскольку каскад мог повлиять на один или несколько из них. Если вы перезагружаете агрегатный корень из БД, вам следует перезагрузить и его дочерние элементы.

По сути, если изменился совокупный корень, вы не можете гарантировать состояние дочерних элементов в кеше, поэтому следует ожидать, что они также могли измениться.

Я также должен добавить, что вы должны тщательно продумать, что вы хотите кэшировать. Если вы кэшируете сущности, которые подвергаются постоянным изменениям, это может не принести вам пользы. Обычно вы кешируете вещи, которые являются относительно статичными, поэтому каскад не имеет большого значения.

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