何时在DbContext

时间:2017-05-30 21:24:12

标签: c# asp.net entity-framework entity-framework-6 asp.net-mvc-5

我正在尝试了解使用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个表?

1 个答案:

答案 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()枚举结果并连接到数据库以获取数据。