как я могу обработать исключение, которое выбрасывается в методе NHibernate Flush?У меня есть действие для удаления объектов.Он загружает объекты из репозитория, используя опубликованные идентификаторы и вызовы repository.Delete(obj)
.
. Оставляя в стороне то, что мое отображение в NHibernate не завершено, и удаление приводит к исключению «Оператор DELETE, конфликтующий с ограничением REFERENCE», это хорошоcase для реализации хедлинга исключений для этого случая.
Таким образом, исключение выдается в Flush, а Flush вызывается в UnitOfWorkPerRequestTask, который создается и уничтожается при каждом запросе, запускается и сбрасывает UnitOfWork (Rhino.Commons.UnitOfWork
).Эта задача зарегистрирована с использованием контейнера Windsor и LifestyleType.Transient
и вызывается HttpApplication внутри методов Begin и EndRequest.
Есть ли способ обработки этого исключения в моем действии удаления, поэтому я могу заметить, что этообъект не может быть удален из-за некоторых отношений?
Здесь трассировка стека исключений (не полная):
NHibernate.Transaction.AdoTransaction.Commit() +212
Rhino.Commons.NHibernateTransactionAdapter.Commit() +33
Rhino.Commons.BaseUnitOfWorkFactory.TransactionalFlush(IsolationLevel isolationLevel) +116
Rhino.Commons.BaseUnitOfWorkFactory.TransactionalFlush() +35
Cereal.Mvc.DataModule.Tasks.UnitOfWorkPerRequestTask.DisposeCore() in C:\projects\Sample\Cereal.Mvc.DataModule\Tasks\UnitOfWorkPerRequestTask.cs:33
System.Web.Mvc.Extensibility.Disposable.Dispose(Boolean disposing) in C:\projects\System.Web.Mvc.Extensibility\Abstraction\Disposable.cs:52
System.Web.Mvc.Extensibility.Disposable.Dispose() in C:\projects\System.Web.Mvc.Extensibility\Abstraction\Disposable.cs:35
Castle.MicroKernel.LifecycleConcerns.DisposalConcern.Apply(ComponentModel model, Object component) +47
Castle.MicroKernel.ComponentActivator.DefaultComponentActivator.ApplyConcerns(Object[] steps, Object instance) +129
Castle.MicroKernel.ComponentActivator.DefaultComponentActivator.ApplyDecommissionConcerns(Object instance) +106
Castle.MicroKernel.ComponentActivator.DefaultComponentActivator.InternalDestroy(Object instance) +37
Castle.MicroKernel.ComponentActivator.AbstractComponentActivator.Destroy(Object instance) +37
Castle.MicroKernel.Lifestyle.AbstractLifestyleManager.Release(Object instance) +48
Castle.MicroKernel.Lifestyle.PerWebRequestLifestyleManager.Evict(Object instance) +38
Castle.MicroKernel.Lifestyle.PerWebRequestLifestyleModule.Application_EndRequest(Object sender, EventArgs e) +305
System.Web.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +68
System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +75
Спасибо за помощь.