如何处理NHibernate中报错:Row was updated or deleted by another transaction .有详细测试说明 谢谢

javamy005 2013-06-25 04:25:18

{
/*
* 模拟多个session操作student数据表
*/

var session1 = Z.Core.NHibernateCore.NHibernateHelper.OpenSession();
var session2 = Z.Core.NHibernateCore.NHibernateHelper.OpenSession();
var user1 = session1.Get<Model.Pub.User>("Design");
var user2 = session2.Get<Model.Pub.User>("Design");

//这时候,两个版本号是相同的


var tx1 = session1.BeginTransaction();
user1.Remark = DateTime.Now.ToString();
tx1.Commit();
//这时候,两个版本号是不同的,其中一个的版本号递增了

while (true)
{
var tx2 = session2.BeginTransaction();
try
{
user2.Remark = DateTime.Now.ToString();
tx2.Commit();
break;
}
catch (Exception ex)
{
tx2.Rollback();
tx2.Dispose();
session2.Evict(user2);
//session2.Clear();

user2 = session2.Get<Model.Pub.User>("Design");
}
}

//当我在我的两个Session中要更新同一个对像的时候
第二个对像因为设置了Version,第二个更新会提示:
Row was updated or deleted by another transaction .

但我用Evict(user2)后,再Get进来,在事务中还是报
Row was updated or deleted by another transaction .
但是如果用Clear后,第二次事务就可以正常提交了
那是否被Evict后的对像,在事务中还会进行处理呢?

除了Clear掉(这样会把我的其他对像也Clear掉的)的方法
有什么办法把user2提交呢?

谢谢
...全文
1595 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
javamy005 2013-06-27
  • 打赏
  • 举报
回复
把第二个事物拉出循环试试 -------------------- 第二个事务加循环是为了让更新时候版本出错后继续尝试的功能 拉出确定是出错的,因为第二次的版本已经在第一次修改了
  • 打赏
  • 举报
回复
把第二个事物拉出循环试试
javamy005 2013-06-26
  • 打赏
  • 举报
回复
UP.........

62,248

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧