我遇到了问题,代码看起来很简单,但是例外:
DDS.Model.ATest atest = new DDS.Model.ATest();
atest.AID = Guid.NewGuid();
ISession session = SessionProvider.GetNewSession();
using (ITransaction transaction = session.BeginTransaction())
{
session.SaveOrUpdate(atest);
int count = session.CreateQuery("from ATest").List().Count;
//Above row throw a exception:
//Batch update returned unexpected row count from update; actual row count: 0; expected: 1
transaction.Commit();
}
答案 0 :(得分:1)
您正在尝试在保存之前加载项目。首先提交事务,然后执行查询。
DDS.Model.ATest atest = new DDS.Model.ATest();
//atest.AID = Guid.NewGuid(); // You should not assign IDs by yourself
ISession session = SessionProvider.GetNewSession();
using (ITransaction transaction = session.BeginTransaction())
{
session.SaveOrUpdate(atest);
transaction.Commit();
}
int count = session.CreateQuery("from ATest").List().Count;
但在您的情况下,这似乎不是问题。我相信你有ID映射为Guid或Guid.comb。您不应将值分配给ID。 NHibernate将负责这一点。
当您分配值并调用session.SaveOrUpdate()时,它将尝试进行更新,因为ID值不是Guid.Empty
。更新方法将失败,但异常:批量更新从更新返回意外行数;实际行数:0;预期:1 ,因为UPDATE ... WHERE AID = <some guid>
将被执行。