我有下面的代码接线1的NHibernate的ISession在Autofac的ASP.NET应用程序:OnRelease过程中是否会发生异常,导致组件未正确配置?
builder.RegisterAdapter<ISessionFactory, ISession>(factory => factory.OpenSession())
.InstancePerHttpRequest()
.OnActivated(activatedArgs =>
{
var session = activatedArgs.Instance;
session.BeginTransaction();
})
.OnRelease(session =>
{
if (session.Transaction != null && session.Transaction.IsActive)
{
try
{
session.Transaction.Commit();
}
catch(Exception e)
{
session.Transaction.Rollback();
throw;
}
}
});
将在本届会议正确地甚至抛出的异常配置在提交?这是ISession和autofac的正确用法吗?
当组件Dispose()d时调用OnRelease(),所以这结束成为一个不好的理想?我的想法是在会话使用时将会话使用包装在事务中。我可以打扰你这种行为的替代实施吗? – 2011-02-28 14:28:21
嗨布鲁诺 - 在自定义动作调用程序(如果您使用MVC)调用Commit()是我知道的最佳选择。 – 2011-02-28 21:34:14
我正在使用webforms,所以也许我会在HttpModule上做到这一点。这只会提出如果没有完成工作就不会创建/提交交易的问题,我想。 – 2011-03-01 01:11:59