如何处理exec异常程序?

时间:2015-08-20 13:45:45

标签: c# stored-procedures nhibernate

我用这种方式用param调用过程(通过使用NHibernate会话):

var session = (NHibernate.ISession)GetConnection("BookDataBase");//NHibernate.ISession
var query = session.CreateSQLQuery("exec UpdateBook @BookId=:bookid");
query.SetInt32("bookid", bookId);
query.ExecuteUpdate();

除了一件事,这个工作正常。这部分是在处理程序中调用的,所以有些情况下连续两次调用这个部分(不同的更改但是同一个bookId),而来源,它们可以同时运行。

所以,当这部分试图第二次运行时,我得到了这个例外:

  

交易未连接或已断开连接

我认为这种情况正在发生,因为当第二次更改尝试执行过程时,第一次更改已经完成并关闭了事务。

我该怎样防止这种情况?我需要能够同时执行2个程序。

1 个答案:

答案 0 :(得分:0)

从@ user1666620开始 - 你应该关注这个......

  

您的会话每请求模式存在问题   实现。 ASP.NET是多线程的,会话正在进行中   线程终止时关闭,而不是在请求结束时关闭。   有很多关于如何管理每个请求的会话和的例子   NHibernate有一个内置的NHibernate.Context.WebSessionContext,但我   更喜欢使用依赖注入框架,如Ninject。

NHibernate exception: Transaction not connected, or was disconnected

在第一次查询完成后,您需要确保Nhibernate不会终止共享连接。