我有一个问题,我为dbContext创建了一个简单的包装程序,它的工作方式类似于存储库模式,可能会与程序的其余部分失去联系。
在此存储库中,我制作了如下方法:
public TwrKarty FirstOrDefault(Func<TwrKarty, bool> predicate)
{
return _dbContext.TwrKarty.FirstOrDefault(predicate);
}
TwrKary是普通的DbSet
public class ErpXlDbContext : DbContext
{
public ErpXlDbContext() :base("name=Something")
{
this.Configuration.LazyLoadingEnabled = false;
Database.CommandTimeout = 180;
}
public DbSet<TwrKarty> TwrKarty { get; set; }
public DbSet<TwrCeny> TwrCeny { get; set; }
}
我的问题是,当我从存储库中调用FirstOrDefault方法时,它随后会调用dbContext的FirstOrDefault方法,但是它没有使用IQueryable扩展方法,而是使用IEnumerable扩展方法,这导致性能下降,因为必须下载来自TwrKarty DbSet的所有数据,完成后会过滤掉您在谓词中要求的数据。
为什么会这样?有没有办法强迫我使用IQueryable扩展名?
当我尝试直接调用DbSet的方法,并且以lambda表达式(而不是Func)形式输入参数时,它将按预期工作...