new dbcontext returns 数据库中的所有数据?
new dbcontext returns all data in database?
我是 EF 和 .Net 的新手,我读过或搜索过的任何东西都没有让我为我所看到的做好准备 - 感谢任何帮助!
问题1:为什么我的DbContext刚一实例化就满是数据!?
(A#1:不是。它只是调试器试图通过自动加载数据来提供帮助。)
原始问题 2:如何将其实例化为空 "repo/container" 对象以通过显式查询加载数据?
更好的问题2:调试时要注意什么?
(A#2:忽略 DbContext 对象并查看 DbSet 和 Query 对象。)
提问原因:
- 调试时,每个 table 的每一行都填充到 dbcontext 的 Locals/ResultsView 中。
- 至少它返回的数据是正确的,但这将是一个真正的性能杀手:0
我认为我已经排除了:
- LazyLoading 设置为 false
- 没有 Linq 查询被故意 运行
- 缓存问题
- 直接在数据库中删除数据returns空Locals/ResultsView。 (所以只要我的数据库没有数据我就可以了:p)
- Migration/db不匹配
- 类型不匹配
没看过:
- Sql 分析器
- 任何深层内部结构,IL
在 .sln(VS2015 社区)中有几个项目使用 CQRS 模式(EF6、MVC5、SimpleInjector)
- .Web(MVC5,DI,部署启动)
- .域 (POCO classes)
- .Data.Read(ReadDbContext、ReadDAO、EF 迁移,设计时启动)
- 使用 LocalDB 实例
- .Data.Write (WriteDbContext, WriteDAO)
在 Data.Read 项目中,当设置为启动时,Main class 有以下 "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?
最简单的方法就是获取 table.
说你的 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();
}
我是 EF 和 .Net 的新手,我读过或搜索过的任何东西都没有让我为我所看到的做好准备 - 感谢任何帮助!
问题1:为什么我的DbContext刚一实例化就满是数据!?
(A#1:不是。它只是调试器试图通过自动加载数据来提供帮助。)
原始问题 2:如何将其实例化为空 "repo/container" 对象以通过显式查询加载数据?
更好的问题2:调试时要注意什么?
(A#2:忽略 DbContext 对象并查看 DbSet 和 Query 对象。)
提问原因:
- 调试时,每个 table 的每一行都填充到 dbcontext 的 Locals/ResultsView 中。
- 至少它返回的数据是正确的,但这将是一个真正的性能杀手:0
我认为我已经排除了:
- LazyLoading 设置为 false
- 没有 Linq 查询被故意 运行
- 缓存问题
- 直接在数据库中删除数据returns空Locals/ResultsView。 (所以只要我的数据库没有数据我就可以了:p)
- Migration/db不匹配
- 类型不匹配
没看过:
- Sql 分析器
- 任何深层内部结构,IL
在 .sln(VS2015 社区)中有几个项目使用 CQRS 模式(EF6、MVC5、SimpleInjector)
- .Web(MVC5,DI,部署启动)
- .域 (POCO classes)
- .Data.Read(ReadDbContext、ReadDAO、EF 迁移,设计时启动)
- 使用 LocalDB 实例
- .Data.Write (WriteDbContext, WriteDAO)
在 Data.Read 项目中,当设置为启动时,Main class 有以下 "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?
最简单的方法就是获取 table.
说你的 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();
}