[英]Parallel Transactions in distinct Session in NHibernate / SQL Server
我们正在构建一个WinForms桌面应用程序,该应用程序通过NHibernate与SQL Server通讯。 经过大量研究,我们确定了会话/表单策略,使用Ninject将新的ISession
注入每个表单(或精确地说是支持控制器)。 到目前为止,它运行良好。
不幸的是,主窗体包含许多数据(大多数是只读的),一段时间后会过时。 为了避免这种情况,我们实现了一个后台服务(实际上只是一个单独的类),该服务轮询数据库中的更改并发出一个事件,该事件使主窗体有选择地更新更改的行。
此后台服务还获得了一个单独的会话,以最大程度地减少对其他表单的干扰。 我们的理解是,只要不嵌套每个会话,就可以并行打开一个事务。
遗憾的是,似乎不是这种情况,我们要么以其中一种形式获取表单,要么以服务形式获取ObjectDisposedException
(因为服务会话从表单中的on使用现有事务并将其提交,这导致表单或表单无法提交) InvalidOperationException
),或者我们收到一个InvalidOperationException
声明“ SQL Server不支持并行事务”。
真的没有办法同时(在不同的会话中)同时打开多个事务吗? 或者,是否有更好的方法可以长时间运行更新旧数据?
提前致谢!
我很确定您搞砸了,并以您不希望的方式共享会话或连接实例。
这可能取决于您使用哪种交易:
session.BeginTransaction()
),则每个会话都独立运行。 除非您进行一些特殊的操作以插入自己的基础数据库连接(并在那里出错),否则每个会话将具有自己的连接和事务。 也许您没有正确处理事务(和会话)?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.