NHibernate(c#) 中的并发冲突示例
很长一段时间以来,我一直在阅读 NHibernate 中的乐观并发。如果我的理解是正确的,那么下面的示例应该很好。
考虑两个事务 T1 和 T2。
- 当 T1 和 T2 同时完成时,状态(数据库条目)将使用最新更新(T1 或 T2)的值进行更新。
尽管它在概念上似乎是合理的,但为了理解和集成测试的目的,我如何模拟它?
有人可以帮我编写一个示例 c# 代码吗?
谢谢,
维杰
For quite some time , I was reading about the optimistic concurrency in NHibernate. If what i understood was correct then the below sample should hold good.
Consider two transactions T1 and T2.
- When T1 and T2 are done simultaneously , the state(DB entries) gets updated with the values of the most latest update.(T1 or T2).
Though it seems to be conceptually sound , how do i simulate this for the purpose of understanding and integration testing.?
Can someone help me with a sample c# code.?
Thanks ,
vijay
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
概念上:
Conceptually :
现在,经过大量谷歌搜索,我找到了一种相当简单的方法。以下是重现此操作的步骤。
在 Get() 和 Update() 方法之间有一个 Thread.Sleep(),仅适用于一个用户(进程 1)。
当进程1运行时,启动没有遇到Thread.Sleep()的进程2,并在进程1之前完成更新。
当进程
现在进程2已经修改了数据库中的数据,现在当进程1尝试更新数据时,NHibernate会抛出一个陈旧对象异常。
请参考以下代码片段。
Now after a lot of googling , i have found out a fairly simple way to do that .The following are the steps to reproduce this.
Have a Thread.Sleep() between the Get() and Update() methods, for only one user(process 1 ).
When process 1 is running , start process 2 which doesnt encounter the Thread.Sleep() and completes the update before the process 1 does .
Now process 2 has modified the data in the data base, now when process 1 tries to update the data, NHibernate throws a stale object exception.
Please refer the following code snippet.