我用这种方式用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个程序。
答案 0 :(得分:0)
从@ user1666620开始 - 你应该关注这个......
您的会话每请求模式存在问题 实现。 ASP.NET是多线程的,会话正在进行中 线程终止时关闭,而不是在请求结束时关闭。 有很多关于如何管理每个请求的会话和的例子 NHibernate有一个内置的NHibernate.Context.WebSessionContext,但我 更喜欢使用依赖注入框架,如Ninject。
NHibernate exception: Transaction not connected, or was disconnected
在第一次查询完成后,您需要确保Nhibernate不会终止共享连接。