NHibernate查询异常,任何机构帮帮我吗?

时间:2012-09-08 10:42:01

标签: nhibernate

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

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

1 个答案:

答案 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>将被执行。