我正在尝试了解使用EF6框架时使用一个DbContext类与多个的性能影响。
例如,如果我们有一个简单的DbContext,例如:
public class MainDbContext : DbContext
{
public DbSet<Car> Cars { get; set; }
public void AddCar(Car car)
{
Cars.Add(car);
SaveChanges();
}
}
现在让我们说我有一个使用上述DbContext的服务:
public class CarService
{
public List<Car> Cars { get; private set; }
public CarService()
{
var dbContext = new MainDbContext();
Cars = dbContext.Cars.ToList();
}
}
DbContext在什么时间点进入数据库并检索存储在数据库中的所有汽车?是在我拨打var dbContext = new MainDbContext();
时还是在我拨打Cars = dbContext.Cars.ToList();
的时候?
如果是前者,如果我有一个包含100个表的DbContext,那么在创建DbContext时是否会查询所有100个表?
答案 0 :(得分:6)
没有。枚举表后会发生查询。即使在第二个示例中,它仍然无法连接到数据库。
枚举时会连接,例如:
dbContext.Cars.ToList();
或者
foreach (Car c in dbContext.Cars)
或者将表绑定到UI控件。
然而,当你做一个地方,按顺序,然后通过,加入等......例如
var result = dbContext.Cars.Where(c => c.Id == 35).OrderBy(c => c.Name);
您将不连接到数据库。您只准备将逻辑操作序列转换为SQL查询。
问题更新后
现在,您的第二个示例使用ToList()枚举结果并连接到数据库以获取数据。