【发布时间】:2017-10-31 12:18:42
【问题描述】:
我试图了解使用 EF6 框架时拥有一个 DbContext 类与多个 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 个表吗?
【问题讨论】:
-
At what point in time did the DbContext go to the database and retrieved all cars that are stored in the database?在那个代码中?绝不。它不起作用,DBContext 上的Cars属性应该是DbSet<Car>类型 -
即使是
DbSet<T>,它也只会在您通过调用ToList()之类的东西明确告知它时从数据库中获取数据。Cars本身不做任何事情 - 它是实体的容器,但它不会保存所有数据,除非你这样做。如果将IQueryable与 Linq 一起使用,则只有在评估枚举数或通过上下文对底层连接执行 SQL 语句时才会提取数据。
标签: c# asp.net entity-framework entity-framework-6 asp.net-mvc-5