Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Nhibernate返回错误的结果_C#_Nhibernate_Linq To Nhibernate - Fatal编程技术网

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)