我是EF和.Net的新手,没有任何我读过或搜索过的东西让我为我所看到的一切做好准备 - 感谢任何帮助!
(A#1:不是。只是调试器试图通过自动加载数据来帮助。)
(A#2:忽略DbContext对象并查看DbSet& Query对象。)
询问原因:
认为我已经排除了:
没看过:
在.sln(VS2015社区)中有多个项目使用CQRS模式(EF6,MVC5,SimpleInjector)
在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
答案 0 :(得分:0)
为什么我的DbContext只是在实例化时就充满了数据!?
DbContext
不会加载数据。你的调试器。调试器允许您查看数据,当您查看数据时,DbContext
将查询数据库。但它不会这样做。这可以使用SQL Server Profiler轻松测试。运行它,您将看到DbContext
在您使用调试器查看数据库之前不会查询数据库。
如何让它实例化为空的" repo / container"对象 通过我的显式查询加载数据?
最简单的方法就是拿到桌子。
说你的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();
}