Я хотел бы иметь метод расширения называется FirstOrDefaultCache()
Дать метод расширения для Entity Framework
, который будет проверять
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) метод (? Вы можете создать другой метод расширения, который будет работать с этим типом. – Brad
Это IQueryable, однако я не могу получить доступ .Local в IQueryable и пытается передать его в DbSet , выдает недопустимое исключение литья во время выполнения. –
blgrnboy
Вы пытались расширить IQueryable вместо DbSet? –