我正在尝试更新对象上的外键引用,然后使用NHibernate保存它。要更新的代码如下:
try
{
var entity = await _session.Query<TObj>().Where(expression).FirstOrDefaultAsync().ConfigureAwait(false);
_mapper.Map(obj, entity);
entity.LastModifiedDate = DateTime.Now;
await _session.FlushAsync().ConfigureAwait(false);
await transaction.CommitAsync().ConfigureAwait(false);
}
finally
{
transaction.Dispose();
}
生成的SQL如下所示:
UPDATE sr.[servicerequest]
SET lastmodifieddate = ?,
isactive = ?,
creationdateutc = ?,
externalreference = ?,
sourcetype = ?,
creator_id = ?,
country_id = ?,
customer_id = ?,
serviceline_id = ?,
pim_id = ?,
team_id = ?,
contactinformation_id = ?,
servicerequestscenario_id = ?
WHERE id = ?
我可以在SSMS中执行它而没有任何问题。但是,当运行commitasync方法时,我得到了NHibernate.Exceptions.GenericADOException说:
查询处理器在查询优化期间耗尽了堆栈空间。请简化查询。
我不明白,怎么能比简单的更新语句更简化呢?在NHibernate上失败时,为什么我可以在SSMS中执行它而没有任何问题?