延迟加载和急切加载 - 我该如何检查?

时间:2014-06-22 18:29:25

标签: c# entity-framework

我有POCO实体类型:

public class Blog 
{  
    public int BlogId { get; set; }  
    public string Name { get; set; }  
    public string Url { get; set; }  
    public string Tags { get; set; }  

    public virtual ICollection<Post> Posts { get; set; }  
}

如何在Visual Studio调试器中检查此查询仅获取Blogs:

var result1 = context.Blog.ToList();

此查询将博客与帖子一起作为查询的一部分:

var result2 = context.Blog.Include(x => x.Posts).ToList();

有可能吗?

3 个答案:

答案 0 :(得分:0)

在上下文中查找有关延迟加载的属性(context.Configuration.LazyLoadingEnabled)并禁用它, 在result1.Posts上添加一个监视,并且不应该加载任何内容。

相反的结果2.经过检查,邮件应该有项目。 当然,这依赖于连接数据库中的条目!

另一个告诉故事标志是Posts上的代理对象,如果启用了延迟加载,它将具有一个奇怪的名称。

答案 1 :(得分:0)

我建议调试器不适合监视这样的东西。相反,我会使用SQL Server Profiler或像EFProf这样的专业工具。

答案 2 :(得分:0)

当然困境在于,只要你发表博客,你就会得到物品,但是那时候你不能再告诉它们何时/如何装载。 (如果您没有监控SQL)。

如果您查看本地收藏集,您可以100%确定:

var result1 = context.Blog.ToList();
var postsLoaded = context.Posts.Local.Any(); // false.


var result2 = context.Blog.Include(x => x.Posts).ToList();
var postsLoaded = context.Posts.Local.Any(); // true. 
// (if Blogs having Posts were loaded)