C# Nhibernate返回错误的结果
我有以下代码:C# Nhibernate返回错误的结果,c#,nhibernate,linq-to-nhibernate,C#,Nhibernate,Linq To Nhibernate,我有以下代码: lock (m_session) { var _result = m_session.Query<StaticContainerStorage>().Where(c => c.StorageId == storageName && c.ContainerId == null).FirstOrDefault(); if (!String.IsNullOrEmpty(_r
lock (m_session)
{
var _result = m_session.Query<StaticContainerStorage>().Where(c => c.StorageId == storageName && c.ContainerId == null).FirstOrDefault();
if (!String.IsNullOrEmpty(_result.ContainerId))
throw new Exception();
if (_result == null)
{
_result = new StaticContainerStorage(storageName, 0);
AddContainer(_result);
}
return _result;
}
返回正确的行,,但返回的对象的属性ContainerId设置为一个值,该值不为null,因此引发异常。这里发生了什么?我有多个线程访问该方法,这就是为什么它被锁定到一个(单个)会话
有什么想法吗
编辑
在我在查询之前添加了
m_session.Flush()
之后,问题似乎消失了。仍然不知道出了什么问题。您在会话中使用了锁,这表明您在应用程序的生命周期中使用了一个会话,或者重复使用了一个不好的会话
您必须手动刷新以允许会话根据以前的更改进行更新,刷新将发出未完成的插入和更新
您应该在会话事务中包装所有查询和更新。提交时,它将自动刷新,但也允许缓存、批处理和将来的查询正常工作
研究nhibernate和会话生命周期管理的工作单元 集装箱运输有什么价值?它是否与数据库中的行相对应?它可能是某个地方设置的默认值吗?例如,数据库中的值为null,而对象的属性是一个实字符串“Kiste1”。
select TOP (1) mfccontain0_.ID as ID0_,
mfccontain0_.StorageId as StorageId0_,
mfccontain0_.StorageIndex as StorageI3_0_,
mfccontain0_.ContainerId as Containe4_0_
from dbo.[MfcContainerStorage] mfccontain0_
where mfccontain0_.StorageId=@p0 and (mfccontain0_.ContainerId is null)