如何处理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提交呢?

谢谢
...全文
1154 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
javamy005 2013-06-27
  • 打赏
  • 举报
回复
把第二个事物拉出循环试试 -------------------- 第二个事务加循环是为了让更新时候版本出错后继续尝试的功能 拉出确定是出错的,因为第二次的版本已经在第一次修改了
  • 打赏
  • 举报
回复
把第二个事物拉出循环试试
javamy005 2013-06-26
  • 打赏
  • 举报
回复
UP.........
课程通过实际项目融入常用开发技术架构,讲授风格独特,提供详细上课日志及答疑,赠送配套的项目架构源码注释详细清晰且表达通俗,均能直接在实际项目应用,正真的物超所值,价格实惠任务作业:综合运用《C#/.Net企业级系统架构设计实战精讲教程》课程所学知识技能设计一个学生成绩管理系统的架构。要求:1.系统基于MVC的三层架构,各层单独建不同的解决方案文件夹。2.采用Model First开发方式,设计架构时只需要设计学生表(TbStudent)和课程表(TbCourse)。学生表必须有的字段是ID、stuName、age;课程表必须有的字段是ID、courseName、content。3.数据访问层采用Entity Framework或NHibernate来实现,必须封装对上述表的增删改查方法。4.必须依赖接口编程,也就是必须要有数据访问层的接口层、业务逻辑层的接口层等接口层。层层之间必须减少依赖,可以通过简单工厂或抽象工厂。5.至少采用简单工厂、抽象工厂、Spring.Net等技术的2种来减少层与层之间的依赖等。6.封装出DbSession类,让它拥有所有Dal层实例和SaveChanges方法。7.设计出数据访问层及业务逻辑层主要类的T4模板,以便实体增加时自动生成相应的类。8.表现层要设计相关的控制器和视图来验证设计的系统架构代码的正确性,必须含有验证增删改查的方法。9.开发平台一定要是Visual Studio平台,采用C#开发语言,数据库为SQL Server。10.提交整个系统架构的源文件及生成的数据库文件。(注意: 作业需写在CSDN博客,请把作业链接贴在评论区,老师会定期逐个批改~~)

62,046

社区成员

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

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

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

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