Как узнать, включены ли связанные данные при использовании быстрой загрузки в Entity Framework?C#

Место общения программистов C#
Ответить
Anonymous
 Как узнать, включены ли связанные данные при использовании быстрой загрузки в Entity Framework?

Сообщение Anonymous »

Я работаю над проектом, в котором используется шаблон репозитория. Мы используем Entity Framework для получения данных из базы данных. Для загрузки связанных данных мы используем нетерпеливую загрузку, что означает, что мы должны явно включить связанные данные.
Скажем, мы хотим, чтобы все блоги и связанные с ними сообщения мы надо бы написать:

Код: Выделить всё

_dbContext.Blogs.Include(b => b.Posts)
Недостаток этого подхода в том, что вы можете видеть только те связанные данные, которые загружены в класс репозитория.
Я попытался показать пример ниже. . Здесь проблема возникает в классе BlogViewModel.cs, поскольку вы пытаетесь получить доступ к blogs.Posts, но сообщения не включены в исходный запрос. Поэтому, если вы пытаетесь получить связанные данные, вам придется проверить источник запроса и посмотреть, включен ли он.

Код: Выделить всё

Repository.cs:
public IEnumerable GetBlogs()
{
return _dbContext.Blogs.ToList();
}

Код: Выделить всё

Service.cs:
public IEnumerable GetBlogs()
{
return _repository.Select(x => new BlogViewModel(x));
}

Код: Выделить всё

BlogViewModel.cs:
public class BlogViewModel
{
public BlogViewModel(BlogDbModel blogDbModel)
{
Name = blogDbModel.Name;
Posts = blogDbModel.Posts;
}

public string Name { get; set; }
public IEnumerable
 Posts { get; set; }
}
Есть ли у кого-нибудь разумное решение этой проблемы? Возможно ли выдать ошибку компиляции, если вы пытаетесь получить доступ к данным, которые не включены?
Я подумал о двух вариантах:
  • Вместо этого используйте отложенную загрузку
  • Всегда возвращайте IQueryable из репозитория
Спасибо

Подробнее здесь: https://stackoverflow.com/questions/563 ... -entity-fr
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»