当运行应返回新插入对象的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(..)方法永远不会 返回陈旧数据;他们也不会返回错误的数据。