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

标签 c# performance entity-framework-6 linq-to-entities dbcontext

我是 EF 和 .Net 的新手,我读过或搜索过的任何内容都无法让我对所看到的内容做好准备 - 感谢任何帮助!

问题1:为什么我的DbContext在实例化时就充满了数据!?

(A#1:不是。这只是调试器试图通过自动加载数据来提供帮助。)

原始问题2:如何将其实例化为空的“repo/container”对象,以便通过显式查询加载数据?

更好的问题2:调试时要注意什么?

(A#2:忽略 DbContext 对象并查看 DbSet 和 Query 对象。)

询问原因:

  • 调试时,每个表中的每一行都会填充到 dbcontext 的 Locals/ResultsView 中。
  • 至少它返回的数据是正确的,但这将是一个真正的性能 killer :0

我想我已经排除了:

  • LazyLoading 设置为 false
  • 未有意运行 Linq 查询
  • 缓存问题
    • 直接在数据库中删除数据会返回空的 Locals/ResultsView。 (所以只要我的数据库没有数据就可以了:p)
  • 迁移/数据库不匹配
  • 类型不匹配

没看过:

  • Sql 分析器
  • 任何深层内部结构,IL

.sln(VS2015 社区)中有多个项目正在使用 CQRS 模式(EF6、MVC5、SimpleInjector)

  • .Web(MVC5、DI、部署启动)
  • .Domain(POCO 类)
  • .Data.Read(ReadDbContext、ReadDAO、EF 迁移、设计时启动)
    • 使用 LocalDB 实例
  • .Data.Write(WriteDbContext、WriteDAO)

在 Data.Read 项目中,当设置为启动时,Main 类具有以下“Play-Code”,断点为:

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

最佳答案

Why is my DbContext full of data simply upon instantiation!?

DbContext 不加载数据。你的调试器可以。调试器允许您查看数据,当您查看数据时,DbContext 将查询数据库。但它不会这样做。这可以使用 SQL Server Profiler 轻松测试。运行它,您将看到 DbContext 不会查询数据库,直到您使用调试器查看它。

How do I get it to instantiate as an empty "repo/container" object for loading data via my explicit queries?

最简单的方法就是获取表格。

假设您的 DbContext 如下所示:

public class MyDbContext : DbContext
{
    public DbSet<Customer> Customers {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();
}

关于c# - new dbcontext 返回数据库中的所有数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41734957/

相关文章:

javascript - JS执行时间

c++ - 模板化无分支 int 最大/最小函数

java - 使用 Intent 从 Unity 应用程序向 Android 应用程序发送数据

c# - 限制标签中的字符数

c# - 在 Asp.Net Core 3.1 中处理 SignalR 集线器中的所有异常

c# - EntityFramework (6) 和异步(waitingForActivation)?

c# - 无法使用 Effort 框架在单元测试中使用现有数据库

c# - 具有 Oracle 托管驱动程序将 NUMBER(10) 映射到 long 的 Entity Framework 不起作用

python - 测试回文的各种方法的性能 [Python]

c# - EF6如何自定义复数