我试图通过存储过程中的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;
}
我的问题是为什么这些实体被视为已修改,正如您在代码中看到的那样,我只是在进行查询。
答案 0 :(得分:2)
可能您的代码还有其他内容,我建议使用NHibernate Profiler,可以从www.nhprof.com下载试用版并监控正在触发的SQL命令并注意哪些对象是被收回。
此外,我不明白你为什么要首先进行交易。
要解决此特定问题,您可以始终使用NHibernates StatelessSession
,它不会跟踪实体,或者您也可以使用Session.Evict
并要求Nhibernate停止跟踪特定对象。