繁体   English   中英

Nhibernate返回错误的结果

[英]Nhibernate returns wrong results

我有这个代码:

        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;
        }

这导致此查询:

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)

返回正确的行, 但是 ,返回的对象将其属性ContainerId设置为一个非空的值,以便抛出异常。 这里发生了什么? 我有多个线程访问该方法,这就是它被锁定到(单个)会话的原因。

有任何想法吗?

编辑在我在查询之前添加m_session.Flush()之后问题似乎消失了。 仍然不知道出了什么问题。

您正在使用会话锁定,这表示您要么在应用程序的生命周期中使用一个会话,或者您正在重用不是一个好习惯的会话。

您必须手动刷新以允许会话从先前的更改更新,刷新将发出未完成的插入和更新。

您应该在会话事务中包装所有查询和更新。 在提交时,它将自动刷新,但它也将允许缓存,批处理和将来的查询正常工作。

nhibernate和会话生命周期管理的研究工作单位。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM