gpt4 book ai didi

更新到数据库后 NHibernate 查询缓存不起作用

转载 作者:行者123 更新时间:2023-12-04 00:59:22 26 4
gpt4 key购买 nike

我在 FluentNHibernate 中启用了二级缓存:

Fluently.Configure()
.Database(MsSqlConfiguration.MsSql2005
.ConnectionString(connectionString)
.Cache(c => c.ProviderClass<SysCacheProvider>().UseQueryCache())
)
.Mappings(m => m.FluentMappings.AddFromAssemblyOf<PersonMap>());

我的映射如下:
    public PersonMap()
{
Id(x => x.Id);
Map(x => x.Name);
Cache.ReadWrite();
}

当我从我的存储库调用 Persons 时,我运行:
    var query = session.GetSession().CreateCriteria<Person>("p")
.Add(Expression.Eq("p.Org.Id", orgRep.GetOrg().Id));
query.SetCacheable(true);
return query.List<Person>().AsQueryable<Person>();

当我启动应用程序时,一切(包括缓存)都可以正常工作。我的第一个查询将命中数据库,但以下查询不会。当我保存 Person 时出现问题。人被保存为:
public virtual void Save(Person p)
{
if (p.Id > 0 && session.GetSession().Get<Person>(p.Id).Org != orgRep.GetOrg())
throw new SecurityException("Organization mismatch");
session.GetSession().Merge(p);
session.GetSession().Flush();
}

保存工作,但之后缓存没有。查询将始终命中数据库。查看 nhibernate 日志说:
 DEBUG - Checking query spaces for up-to-dateness [[Person]]
DEBUG - Fetching object 'NHibernate-Cache:UpdateTimestampsCache:[Person]@1639794674' from the cache.
DEBUG - cached query results were not up to date for: sql: SELECT this_.Id as Id0_0_, this_.Name as Name0_0_, this_.Org_id as Org5_0_0_ FROM [Person] this_ WHERE this_.Org_id = ?; parameters: ['1']; first row: 0

我究竟做错了什么?

最佳答案

尝试使用 block 在 session 中实例化显式事务。这篇文章看起来很相关:- http://nhprof.com/Learn/Alerts/DoNotUseImplicitTransactions

关于更新到数据库后 NHibernate 查询缓存不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3626643/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com