0

我正在尝试通过存储过程中的 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;
        }

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

4

1 回答 1

2

您的代码可能还有其他问题,我可以建议使用 NHibernate Profiler 的试用版,该试用版可以从 www.nhprof.com 下载并监视正在触发的 SQL 命令并注意正在检索的对象。

另外我不明白你为什么首先提交交易。

要解决这个特殊问题,您可以始终使用StatelessSession不跟踪实体的 NHibernate,或者您也可以使用Session.Evict并要求 Nhibernate 停止跟踪特定对象。

于 2012-04-13T05:59:30.477 回答