.net 多个同时保存会导致WCF/NHibernate“;由另一个事务更新的行";
我正在开发一个大型应用程序,该应用程序使用大量数据管理复杂的“事件” 该应用程序分为一个客户端(主要是.NET 2.0)、一个基于WCF的服务器(在IIS上运行)(此层的web服务)和一个基于NHibernate的数据后端(带有MS SQL server数据库后端) 我们在以下场景中遇到错误: 多个用户(在我们的测试中是6个)同时在客户机上保存一个持久化对象(如事件)。(这是通过口头倒计时完成的,因此我们讨论的是由于反应时间而产生的秒左右的差异) 当他们在客户机上保存对象时,客户机调用服务器来保存该对象。服务器执行所需的任何业务逻辑,然后通过NHibernate提交更改 在这种情况下(通过服务调用多次保存),一些客户端将返回一个未经处理的异常: “行已被其他事务更新或删除” 这是NHibernate的一个例外 在我的研究中,我发现了一些这种错误的例子,但它总是循序渐进的。我们的应用程序按顺序运行良好,这仅在同时保存时发生 如何保护多个同时进行的NHibernate事务不受彼此影响 (这将是一个高容量的应用程序,因此只需最少的锁定就可以了。我们一般无法锁定所有存储。) 是否有NHibernate设置可以执行此操作?我们需要先找出一些服务器代码端锁定吗?数据库是否可以使用不同的事务保护设置来处理此问题 这是一个需要测试的问题,就像大多数线程问题一样,因此采用了研究/理论方法。这样的架构有什么样的体验 编辑:进一步的信息和理论 似乎更改表中直接作为主实体的值不会导致此问题,而更改通过连接访问的元素则会导致此问题。(在本例中是一组属性) 我们似乎适合这种情况的工作理论如下: 同一事件有多个保存。每个人都会获得一个现有事件的副本(要修改)。第一个要保存的就可以了。但是,后面的更新会进行更新,例如添加或删除属性(这是一个联接表),并发现需要完成的添加或删除操作已经完成,并且由于另一个事务编辑了该事件而退出.net 多个同时保存会导致WCF/NHibernate“;由另一个事务更新的行";,.net,wcf,nhibernate,.net,Wcf,Nhibernate,我正在开发一个大型应用程序,该应用程序使用大量数据管理复杂的“事件” 该应用程序分为一个客户端(主要是.NET 2.0)、一个基于WCF的服务器(在IIS上运行)(此层的web服务)和一个基于NHibernate的数据后端(带有MS SQL server数据库后端) 我们在以下场景中遇到错误: 多个用户(在我们的测试中是6个)同时在客户机上保存一个持久化对象(如事件)。(这是通过口头倒计时完成的,因此我们讨论的是由于反应时间而产生的秒左右的差异) 当他们在客户机上保存对象时,客户机调用服务器来保
我们应该如何使这些事件保持同步?我对单用户多线程应用程序也有同样的问题。关键是用[ThreadSafe]修饰我的会话变量。奇怪的是,我所看到的各种会话管理器似乎都没有做到这一点,而且它们认为它们是自动线程安全的。。。我的经验不是这样的
我接受了上述答案,因为这或多或少是我们的路线。我想进一步阐述。我们的应用程序打算大量使用,因此完全锁定“更新主要实体”过程是个坏主意 我们最终使用的是C#互斥锁,该互斥锁使用“独一无二的东西”进行锁定,在本例中是一个事件ID。这意味着在同一复杂实体上的任何操作都将被锁定,并在这个意义上成为“原子”操作。这解决了我们的问题。我们或多或少地(通过现有的实用程序类)将每个“破坏性”服务操作包装在互斥对象中