NHibernate查询例外,有人帮我吗?

NHibernate查询例外,有人帮我吗?,nhibernate,Nhibernate,我遇到了一个问题,代码看起来很简单,但有一个例外: DDS.Model.ATest atest = new DDS.Model.ATest(); atest.AID = Guid.NewGuid(); ISession session = SessionProvider.GetNewSession(); using (ITransaction transaction = session.BeginTransaction())

我遇到了一个问题,代码看起来很简单,但有一个例外:

        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();
        }

您正在尝试在保存前加载项。首先提交事务,然后执行查询

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,因为
更新。。。其中将执行AID=

但是我的程序逻辑必须在事务提交之前进行查询,其他方法可以做什么?尝试删除AID分配行。这首先导致了问题。ATest.nhb.xml文件将ID列映射如下:
SaveOrUpdate
正在查找
ID
值,以确定是否应执行保存或更新操作。如果将
id
设置为
Guid.NewGuid()
,并调用
SaveOrUpdate
,则将执行更新,因为
id
不等于
unsaved值
。我已将代码会话.SaveOrUpdate更改为session.Save,无异常,但count=0,我的期望值为1。