Атрибуты отображения NHibernate + Грязная проверка - PullRequest
1 голос
/ 27 октября 2010

У меня проблемы с обновлением NHibernate некоторых моих сущностей, когда это не должно происходить (грязная проверка).Поскольку я использую NHibernate.Mapping.Attributes для сопоставления своих классов, я обнаружил, что есть параметр «Проверка» для элемента «Класс» NHMA.Я хотел бы знать, могу ли я отключить грязную проверку, установив для этого параметра значение false или что-то еще (обязательный тип для этого параметра - строка, так что это может быть не так).

Любая помощь будет принята с благодарностью!

1 Ответ

5 голосов
/ 27 октября 2010

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

Тем не менее, есть решение. NHibernate использует слушатели, которые запускаются перед вставкой и обновлением. Более подробную информацию об этом можно найти в http://ayende.com/Blog/archive/2009/04/29/nhibernate-ipreupdateeventlistener-amp-ipreinserteventlistener.aspx, http://www.codinginstinct.com/2008/04/nhibernate-20-events-and-listeners.html и во многих других местах .

Слушатели события сами имеют возвращаемое значение. Это возвращаемое значение говорит NHibernate, выполнять ли фактические SQL-запросы вставки / обновления. Когда вы возвращаете false, он выполняет их. Когда вы возвращаете true, это не так. Таким образом, вы можете подавить фактическое сохранение в базе данных.

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

...