gpt4 book ai didi

c# - 什么时候在 DbContext 上执行查询

转载 作者:太空狗 更新时间:2023-10-29 20:12:40 24 4
gpt4 key购买 nike

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

最佳答案

没有。一旦您枚举了一个表,查询就会发生。即使在您的第二个示例中,它仍然没有连接到数据库。

枚举时会连接,例如:

dbContext.Cars.ToList();

或者

foreach (Car c in dbContext.Cars)

或者将表格绑定(bind)到 UI 控件。

但是,当您创建位置、排序依据、然后依据、加入等时。例如

var result = dbContext.Cars.Where(c => c.Id == 35).OrderBy(c => c.Name);

不会连接到数据库。您只是准备将逻辑操作序列转换为 SQL 查询。


问题更新后

现在,您的第二个示例使用 ToList() 枚举结果并连接到数据库以获取数据。

关于c# - 什么时候在 DbContext 上执行查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44272140/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com