[NUnit.Framework.Test]
public void TestInsertSelect()
{
//数据库
//School
//Guid nvarchar(32)
//Code nvarchar(32)
//Name nvarchar(32) var session = Z.Core.NHibernateCore.NHibernateHelper.GetCurrentSession();
session.BeginTransaction();
try
{
var school = new Model.Tst.School();
school.Code = "AAA";
school.Name = "AAA";
//添加一个School Code 为 AAA 的记录 插入数据库
session.Save(school);
session.Flush(); //更改掉学校的代码
school.Code = "BBB";
//然后调用更新
Update(session, school);
session.Flush();
session.Transaction.Commit();
//但最后你看数据库,他已经变成了BBB了,但如果不用事物的话不会出现这个问题
//原因是因为他在执行query.Count,自动提交了School的更改
//这是为什么呢??????????? 如何来解决这个问题
}
catch (Exception ex)
{
session.Transaction.Rollback();
}
}void Update(NHibernate.ISession session, Model.Tst.School school)
{
//创建一条查询
var query = session.Linq<Model.Tst.School>();
//取出数据库中Code=“BBB”的记录数
int count = query.Count(l => l.Code == "BBB");
//但这里出问题了!本来我表记录为空的,然后插入一条AAA,
//这里查询的是表中Code="BBB"的记录数据,按道理来说应该为0,
//但实际上是在查询之前,NHibernate会将我上面school.Code = "BBB";的操作进行更新到数据库
//这是有严重问题的啊,因为我这里是要判断数据库没有BBB我才进行更新
//本来,我的代码表最终结果应该为1条记录Code=CCC
//但这样的结果的话为 Code="BBB"
//因为在上面query.Count他就提交了BBB,而得到count=1,所以下面的代码就没有执行
//那应该如何处理这个问题呢?
//是否要禁用掉NHibernate的一线缓存?????
if (count == 0)
{
school.Code = "CCC";
session.Update(school);
}
}
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货