NHibernate CreateSQLQuery处理更新的实体

时间:2012-04-12 19:16:51

标签: nhibernate

我试图通过存储过程中的nhibernate的CreateSQLQuery从数据库中检索数据。类似下面的代码。

然后我基本上在进行会话事务提交,但是提交会抛出“无法更新”异常。它试图在CustomEntityDao上执行更新语句。

        const string selectSQL = "EXEC GetDataSP @Id = :Id";
        var query = Session.CreateSQLQuery(selectSQL);
        query.SetString("Id", "10");
        query.AddEntity(typeof (CustomEntityDao));

        var entityList = query.List<CustomEntityDao>();

        try
        {
            Session.Transaction.Commit();
        }
        catch (Exception ex)
        {
            throw ex;
        }

我的问题是为什么这些实体被视为已修改,正如您在代码中看到的那样,我只是在进行查询。

1 个答案:

答案 0 :(得分:2)

可能您的代码还有其他内容,我建议使用NHibernate Profiler,可以从www.nhprof.com下载试用版并监控正在触发的SQL命令并注意哪些对象是被收回。

此外,我不明白你为什么要首先进行交易。

要解决此特定问题,您可以始终使用NHibernates StatelessSession,它不会跟踪实体,或者您也可以使用Session.Evict并要求Nhibernate停止跟踪特定对象。