C# new dbcontext返回数据库中的所有数据?

C# new dbcontext返回数据库中的所有数据?,c#,performance,entity-framework-6,linq-to-entities,dbcontext,C#,Performance,Entity Framework 6,Linq To Entities,Dbcontext,我是EF和.Net的新手,我读过或搜索过的任何东西都没有为我所看到的做好准备-任何帮助都是非常感谢的 问题1:为什么我的DbContext在实例化时就充满了数据!? (答1:不是。只是调试器试图通过自动加载数据来提供帮助。) 原始问题2:如何将其实例化为空的“repo/container”对象,以便通过显式查询加载数据? 更好的问题2:调试时我应该注意什么? (A#2:忽略DbContext对象,查看DbSet和Query对象。) 提出问题的理由: 调试时,将在dbcontext的Locals

我是EF和.Net的新手,我读过或搜索过的任何东西都没有为我所看到的做好准备-任何帮助都是非常感谢的

问题1:为什么我的DbContext在实例化时就充满了数据!? (答1:不是。只是调试器试图通过自动加载数据来提供帮助。)

原始问题2:如何将其实例化为空的“repo/container”对象,以便通过显式查询加载数据? 更好的问题2:调试时我应该注意什么? (A#2:忽略DbContext对象,查看DbSet和Query对象。)

提出问题的理由:

  • 调试时,将在dbcontext的Locals/ResultsView中填充每个表中的每一行
  • 至少它返回的数据是正确的,但这将是一个真正的性能杀手:0
我想我已经排除了:

  • LazyLoading设置为false
  • 没有故意运行Linq查询
  • 缓存问题
    • 直接删除数据库中的数据会返回空的局部变量/ResultsView。(只要我的数据库没有数据,我就没事:p)
  • 迁移/数据库不匹配
  • 类型不匹配
没有看过:

  • Sql分析器
  • 有深的内部构件吗
在.sln(VS2015社区)中有几个项目使用CQRS模式(EF6、MVC5、SimpleInjector)

  • .Web(MVC5、DI、部署启动)
  • .Domain(POCO类)
  • .Data.Read(ReadDbContext、ReadDAO、EF迁移、设计时启动)
    • 使用LocalDB实例
  • .Data.Write(WriteDbContext,WriteDAO)
在Data.Read项目中,当设置为startup时,主类具有以下带有断点的“播放代码”:

using ( MyDbContext dbcontext = new MyDbContext() )
    {
    //BREAKPOINT:  Why is dbcontext full of data simply upon instantiation!?
    //(while Debugging, Every row, from every table, is populated in Locals/ResultsView of dbcontext)
    //No explicit Linq queries have been run
为什么我的DbContext仅仅在实例化时就充满了数据

DbContext
不加载数据。调试器可以。调试器允许您查看数据,当您查看数据时,
DbContext
将查询数据库。但它不这样做。这可以很容易地用SQL Server Profiler进行测试。运行它,您将看到在使用调试器查看数据库之前,
DbContext
不会查询数据库

如何将其实例化为一个空的“repo/container”对象 通过显式查询加载数据

最简单的方法就是拿到桌子

假设您的
DbContext
如下所示:

public class MyDbContext : DbContext
{
    public DbSet<Customer> Customers {get; set;}
}
公共类MyDbContext:DbContext
{
公共数据库集客户{get;set;}
}
然后您可以像这样获取容器:

using(var context = new MyDbContext())
{
    // Get the table. This can serve as your repository.
    DbSet<Customer> table = context.Customers;

    // If you're using generics you can do like this as well.
    DbSet<Customer> otherTable = context.Set<Customer>();

    // Specify your explicit query.
    IQueryable<Customer> query = table.Where(x => x.Name == 'Jenny');

    // Note that EF still haven't executed a query.
    // By calling methods like ToList() or FirstOrDefault() it will run the query.
    IList<Customer> result = query.ToList();
}
使用(var context=new MyDbContext())
{
//获取表格。这可以作为您的存储库。
DbSet table=context.Customers;
//如果你使用泛型,你也可以这样做。
DbSet otherTable=context.Set();
//指定显式查询。
IQueryable query=table.Where(x=>x.Name=='Jenny');
//请注意,EF仍然没有执行查询。
//通过调用ToList()或FirstOrDefault()等方法,它将运行查询。
IList result=query.ToList();
}

非常感谢!问题2的前提是“相信我撒谎的眼睛”,但谢谢你补充的细节!我将从您的示例中得到我的答案“2”为:“调试时只需查看‘表’、‘其他表’、‘查询’、‘结果’,而忽略‘上下文’”