У меня есть приложение MVC, использующее nHibernate для сохранения данных, но по какой-то причине, несмотря на удаление моего объекта из сеанса, оно все еще сохраняется в базе данных.
У меня есть сложный объект, к которому я позволил пользователю применить изменение и сделать так, чтобы он пересчитывал дочерние коллекции на основе нового значения свойства родительского объекта. Но я не хочу, чтобы эти изменения сохранялись, потому что я передаю полученные изменения обратно в представление, чтобы сделать его только для предварительного просмотра. Пользователь может зафиксировать их, но используя другое действие.
Сразу же после того, как я запросил nHibernate для моего объекта в этом процессе, я исключил его из сеанса, но по какой-то причине он все еще сохраняется.
Согласно профайлеру nHibernate, это происходит из-за фиксации транзакции, которую я имею в фильтре, украшающем мое действие контроллера. Это было сделано из-за лучшей практики, которую я прочитал относительно элементов, считываемых из базы данных, которые не кэшируются в кэш 2-го уровня, если транзакция не зафиксирована, даже если не было внесено никаких изменений. Тем не менее, это не объясняет, почему фиксация привела бы к тому, что в удаленном объекте сохранялись изменения в базе данных. Я предполагаю, что упускаю что-то, что объясняет это поведение, но я не уверен, что?