【发布时间】:2016-07-29 04:02:28
【问题描述】:
我想要一个名为FirstOrDefaultCache()的扩展方法
会检查
dbContext.EntityName.Local.FirstOrDefault(condition),并且仅当 那是空的,检查dbContext.EntityName.FirstOrDefault(condition)。
我从另一个帖子中得到了以下内容,它可以正常工作:
public static TEntity FirstOrDefaultCache<TEntity>(this DbSet<TEntity> queryable,
Expression<Func<TEntity, bool>> condition) where TEntity : class
{
return queryable
.Local.FirstOrDefault(condition.Compile()) // find in local cache
?? queryable.FirstOrDefault(condition);
// if local cache returns null check the db
}
但是,我不能在 .Include() 之后使用它。
dbContext.EntityName.FirstOrDefaultCache(some condition); 有效,但 dbContext.EntityName.Include(x => x.NavProperty).FirstOrDefaultCache(some condition); 无效。
【问题讨论】:
-
Include()方法的返回类型是什么?您可以创建另一个适用于该类型的扩展方法。 -
这是一个 IQueryable
,但是,我无法访问 IQueryable 中的 .Local,并且尝试将其强制转换为 DbSet 会在运行时引发无效强制转换异常。跨度> -
您是否尝试过扩展 IQueryable
而不是 DbSet?
标签: c# entity-framework linq linq-to-entities extension-methods