NHibernate查询<> Save()之后从唯一列返回null

时间:2013-12-13 16:02:56

标签: nhibernate linq-to-nhibernate

当运行应返回新插入对象的NHibernate Query<>时,它返回NULL

我的代码基本上是这样做的(通过多个功能):

using (var session = SessionFactory.OpenSession())
{
   ...
   var cryptoKey = new cryptoKey(bucket, handle, keyData, expiresUtc);
   session.Save(cryptoKey);

   ...
   var cryptoKey = (from key in _session.Query<CryptoKey>()
                    where key.Bucket == bucket && key.Handle == handle
                    select key).SingleOrDefault();

   // cryptoKey is returned as NULL
   ...
   session.Flush();
}

在查询运行时,会话似乎没有自动刷新,并且&#34;要刷新&#34; object不用于从唯一列进行查找。

如果我在flush()后手动拨打Save(),则可以。但这似乎忽略了在需要时让NHibernate冲洗的重点。如果我拨打session.Get(id)(在调试即时窗口中),它可以正常工作,但我不知道ID,只知道唯一的列。

这是CryptoKey映射,ID留给NHibernate。

public class CryptoKeyMapping : ClassMapping<CryptoKey>
{
    public CryptoKeyMapping()
    {
        Property(x => x.Bucket, map =>
            {
                map.UniqueKey("UQ_CryptoKeys");
                map.NotNullable(true);
            });

      Property(x => x.Handle, map =>
         {
             map.UniqueKey("UQ_CryptoKeys"); 
                map.NotNullable(true);
         });

        Property(x => x.KeyData, map =>
            {
                map.NotNullable(true);
                map.Length(256);
            });

        Property(x => x.ExpiresUtc, map => map.NotNullable(true));
    }

我怎样才能避免在每Save()后手动调用flush(),因为我不知道如何进行以下查询?

似乎与NHibernate doc的以下段落相吻合。

  

NHibernate确实保证ISession.Find(..)方法永远不会   返回陈旧数据;他们也不会返回错误的数据。

0 个答案:

没有答案