Ped*_*tos 2 nhibernate fluent-nhibernate
当我使用Session.Get()时,我有二级缓存工作正常但是如果我在NH3.0中使用新的QueryOver API,缓存不会被命中.
这非常有效:
public TEntity Get(int id)
{
return session.Get<TEntity>(id);
}
Run Code Online (Sandbox Code Playgroud)
这不会达到缓存:
public TEntity Get(Expression<Func<TEntity bool>> filter)
{
var query = _session.QueryOver<TEntity>()
.Where(filter);
query.Cacheable();
return query.SingleOrDefault();
}
Run Code Online (Sandbox Code Playgroud)
我正在使用事务来确保正确使用二级缓存.
这是我的Session配置:
Session = Fluently.Configure()
.Database(SQLiteConfiguration.Standard.InMemory().ShowSql())
.Mappings(x => x.FluentMappings.AddFromAssemblyOf<Activity>())
.Cache(c => c.UseSecondLevelCache()
.UseQueryCache()
.ProviderClass<NHibernate.Cache.HashtableCacheProvider>())
.ExposeConfiguration(cfg => configuration = cfg)
.BuildSessionFactory()
.OpenSession();
Run Code Online (Sandbox Code Playgroud)
我正在为缓存使用设置我的实体:
public class CommentMap : ClassMap<Comment>
{
public CommentMap()
{
Cache.ReadWrite();
Id(x => x.Id);
Map(x => x.Message);
References(x => x.Activity);
References(x => x.User);
}
}
Run Code Online (Sandbox Code Playgroud)
我在QueryOver查询上调用Cacheable方法:
public TEntity Get(Expression<Func<TEntity, bool>> filter)
{
var query = _session.QueryOver<TEntity>()
.Where(filter);
query
.Cacheable();
return query.SingleOrDefault();
}
Run Code Online (Sandbox Code Playgroud)
我必须遗漏一些东西,只是无法弄清楚是什么.
有几个相关问题:
Session.Load 从来没有命中数据库,所以它不是缓存工作的证明QueryOver使用该Cacheable()方法缓存它此外,请确保您要缓存其查询的实体具有实体缓存.否则缓存会使事情变得更糟.
| 归档时间: |
|
| 查看次数: |
2507 次 |
| 最近记录: |