Изменена проверка NHibernate для запроса на сохранение - PullRequest
0 голосов
/ 14 сентября 2010

Мне было интересно, есть ли какая-либо функциональность в NHibernate, чтобы проверить, были ли внесены изменения в смысле объекта, который он был загружен, что потребовало бы записи в БД для сохранения.

У меня есть некоторыедругие части, такие как выбранные в данный момент элементы и т. д., могут измениться, но если они это сделают, то это не изменит фактических данных.

Если в WPF / C # есть хороший способ проверить, есть ли изменения,необходимо сохранить, чтобы я мог предложить пользователю, прежде чем они выходят.

Спасибо

Ответы [ 2 ]

0 голосов
/ 14 сентября 2010

Вы можете запросить Session.IsDirty, который вернет true, если есть изменения в любом объекте.

Более сложный подход включает получение SessionImplementor, Persister, PersistenceContext и текущих значений, а затем использование FindDirty там.1004 *

Я не рекомендую, но я могу дать вам код, если это необходимо.Это лучше отслеживать на уровне ViewModel.

0 голосов
/ 14 сентября 2010

Краткий ответ : Вам нужно будет реализовать свои собственные методы "IsDirty" .

NHibernate был разработан для работы без наложения каких-либо требований на ваши классы сущностей.Он выполняет свое собственное внутреннее отслеживание в сеансе на предмет того, является ли объект, отслеживаемый сеансом, грязным.Хотя было бы неплохо, если бы в ISession был раскрыт какой-либо метод проверки, является ли объект грязным, он не учитывает изменения, внесенные в объекты, когда они отсоединены от сеанса.

Ваш класс может реализовывать ICloneable и IEquatable, затем вы можете сделать клон вашего объекта, прежде чем позволить пользователю вносить изменения, а затем сравнить этот клон с текущим объектом, чтобы увидеть, не являются ли они больше.

Если коллекции в вашем классе также реализуют ICloneable и IEquatable, этот метод может также дать вам знать, если что-то изменилось в иерархии.

...