ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

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

2019-05-27 14:56:51  阅读:288  来源: 互联网

标签: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个表?

解决方法:

不会.一旦枚举表,就会发生查询.即使在第二个示例中,它仍然无法连接到数据库.

它会在您枚举时连接,例如:

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

标签:c,asp-net,entity-framework,entity-framework-6,asp-net-mvc-5
来源: https://codeday.me/bug/20190527/1163984.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有