C# new dbcontext返回数据库中的所有数据?
我是EF和.Net的新手,我读过或搜索过的任何东西都没有为我所看到的做好准备-任何帮助都是非常感谢的 问题1:为什么我的DbContext在实例化时就充满了数据!? (答1:不是。只是调试器试图通过自动加载数据来提供帮助。) 原始问题2:如何将其实例化为空的“repo/container”对象,以便通过显式查询加载数据? 更好的问题2:调试时我应该注意什么? (A#2:忽略DbContext对象,查看DbSet和Query对象。) 提出问题的理由: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
- 调试时,将在dbcontext的Locals/ResultsView中填充每个表中的每一行李>
- 至少它返回的数据是正确的,但这将是一个真正的性能杀手:0
- LazyLoading设置为false
- 没有故意运行Linq查询
- 缓存问题
- 直接删除数据库中的数据会返回空的局部变量/ResultsView。(只要我的数据库没有数据,我就没事:p)
- 迁移/数据库不匹配
- 类型不匹配
- Sql分析器
- 有深的内部构件吗
- .Web(MVC5、DI、部署启动)
- .Domain(POCO类)
- .Data.Read(ReadDbContext、ReadDAO、EF迁移、设计时启动)
- 使用LocalDB实例
- .Data.Write(WriteDbContext,WriteDAO)
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”为:“调试时只需查看‘表’、‘其他表’、‘查询’、‘结果’,而忽略‘上下文’”