#c# #entity-framework
#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, что этот запрос получает только блоги:
var result1 = context.Blog.ToList();
И этот запрос получает блоги вместе с сообщениями как часть запроса:
var result2 = context.Blog.Include(x => x.Posts).ToList();
Возможно ли это?
Ответ №1:
В контексте найдите свойство, касающееся отложенной загрузки (context.Configuration.LazyLoadingEnabled) и, отключив его, добавьте наблюдение за результатом1.Сообщения, и ничего не должно было быть загружено.
И наоборот, результат2.После проверки сообщения должны содержать элементы. Конечно, это зависит от подключаемых записей в базе данных!
Другим контрольным признаком является прокси-объект в Posts, collection, который будет иметь странное имя, если включена отложенная загрузка.
Комментарии:
1. В обоих случаях: result1 и result2 получили сообщения.
2. Итак, вы выполнили те проверки, о которых я упоминал? Я только что обновил сообщение, чтобы включить свойство. Я не мог вспомнить это сразу.
3. Я включил отложенную загрузку и добавил просмотр в result1 и result2.
Ответ №2:
Я бы предположил, что отладчик не является подходящим местом для мониторинга подобных вещей. Вместо этого я бы использовал профилировщик SQL Server или специальный инструмент, такой как EFProf.
Ответ №3:
Конечно, дилемма заключается в том, что, как только вы обращаетесь к blog.После публикации вы получите элементы, но в этот момент вы больше не можете сказать, когда / как они были загружены. (Если вы не отслеживаете 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)