我正在使用 Entity Framework 5.0,表达式 在 LINQ-to-Entities 中的建议类型成员支持中进行了描述?
public static Expression <Func <Category , bool >> IsRootExpression
{
get
{
return p => p!= null && !p.ParentId.HasValue;
}
}
在我开始使用“实体框架扩展库”中的缓存之前,一切都运行良好https://github.com/loresoft/EntityFramework.Extended
目前,当我在查询中使用我的表达式 IsRootExpression 时,缓存不会自动过期或使用标签和强制过期。使用缓存但不使用表达式的代码可以正常工作并返回更新的数据。
如何同时使用缓存和表达式?
要进行测试,请使用以下代码:
数据已更新:
var rep = new CategoryRepository ();
var testRoot = rep.AllIncluding(it => it.Items)
.Where(it=> !it.ParentId.HasValue)
.FirstOrDefault();
testRoot.Title = "test root " + DateTime .Now.ToLongTimeString();
rep.Save();
var tag = "test_tag" ;
CacheManager .Current.Expire(tag);
var rootCached = rep.AllIncluding(it => it.Items)
.Where(it => !it.ParentId.HasValue)
.FromCache(tags: new[] { tag })
.FirstOrDefault();
bool isOk = rootCached.Title == testRoot.Title;
从缓存中加载过时的版本:
var rep = new CategoryRepository ();
var testRoot = rep.AllIncluding(it => it.Items)
.Where( Category.IsRootExpression)
.FirstOrDefault();
testRoot.Title = "test root " + DateTime .Now.ToLongTimeString();
rep.Save();
var tag = "test_tag" ;
CacheManager .Current.Expire(tag);
var rootCached = rep.AllIncluding(it => it.Items)
.Where( Category.IsRootExpression)
.FromCache(tags: new[] { tag })
.FirstOrDefault();
bool isOk = rootCached.Title == testRoot.Title;