[英]Lazy loading and eager loading - how can I check that?
我有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調試器中檢查此查詢僅獲取Blog:
var result1 = context.Blog.ToList();
此查詢將Blog和Posts一起作為查詢的一部分:
var result2 = context.Blog.Include(x => x.Posts).ToList();
可能嗎?
在上下文中查找有關延遲加載的屬性(context.Configuration.LazyLoadingEnabled),並禁用它,在result1.Posts上添加一個監視,並且不應加載任何內容。
相反,結果2.郵件應接受檢查。 當然,這取決於要連接的數據庫中的條目!
如果啟用了延遲加載,則另一個有名的跡象是Posts,collection上的代理對象,該對象的名稱將為一個奇怪的名稱。
我建議調試器不是監視此類內容的正確位置。 相反,我將使用SQL Server Profiler或EFProf之類的專用工具。
當然,兩難選擇是,一旦您訪問博客。發布您將獲得項目,但那一刻您無法告訴它們何時/如何加載。 (如果您不監視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)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.