Я использую Nhibernate в контексте сеанса для запроса.
Когда я использую session.Update и фиксирую или откатываю свою транзакцию, я получаю ObjectDisposedException.
трассировка стека для этого исключения:
в NHibernate.Transaction.AdoTransaction.CheckNotDisposed ()
в NHibernate.Transaction.AdoTransaction.Rollback ()
в MyService.update (элемент MyItem) в C: \ Projects \ MyProject \ ItemService.cs: строка 121
в MyController.Edit (Nullable`1 pageId, элемент MyItem, коллекция FormCollection) в C: \ Projects \ MyProject \ ItemController.cs: строка 251
Перед выполнением обновления транзакция содержит следующие свойства:
isActive: правда,
wasCommitted: ложь,
wasRollBacked: false
После выполнения действия обновления свойства имеют следующие значения:
isActive: ложь,
wasCommitted: правда,
wasRollBacked: false
Почему я получаю исключение и почему логические значения меняются без фиксации?
Я использую следующий код для выполнения этого действия:
using (var tx = SessionManager.CurrentSession.BeginTransaction())
{
try
{
//perform update
wysiwygitemRepository.Update(item);
// perform an action that raises an exception (because of null value)
pageSettingService.SaveSettings(null, item.Id);
tx.Commit();
}
catch(Exception)
{
tx.Rollback();
}
}
Я использовал fluhmode.none как flushmode, но также пробовал flushmode.auto
Даже если я изменю код на следующий, я все равно получу то же исключение:
using (var tx = SessionManager.CurrentSession.BeginTransaction())
{
try
{
//perform update
SessionManager.CurrentSession.Update(item);
tx.Commit();
}
catch(Exception)
{
tx.Rollback();
}
}