wkololo_4ever
@wkololo_4ever

Как работать с зависимыми таблицами в EF?

Есть 2 модели
public class News
    {
        public int NewsID { get; set; }
        public string NewsArticle { get; set; }

        public virtual User User { get; set; }
        public int UserId { get; set; }
    }
   public class User
    {
        public int Id { get; set; }
        public string Email { get; set; }
        public string Password { get; set; }

        public virtual ICollection<News> News { get; set; }
    }

Пытаюсь взять данные о User из полученной модели News
@foreach (AuthorizationNew.Models.News News in Model.News)
{
News.NewsArticle 
   Автор @News.User.Email 
}

Выдает ошибку
Существует назначенный этой команде Command открытый DataReader, который требуется предварительно закрыть.
Как ее исправить? И в чем ее смысл?
  • Вопрос задан
  • 4846 просмотров
Решения вопроса 1
@AlexP11223
Выдает ошибку
Существует назначенный этой команде Command открытый DataReader, который требуется предварительно закрыть.
Как ее исправить? И в чем ее смысл?

Сжечь русскую студию и поставить английскую. А после этого погуглить:
https://www.google.com/search?q=ef+there+is+alread...
stackoverflow.com/questions/4867602/entity-framewo...
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
wkololo_4ever
@wkololo_4ever Автор вопроса
@AlexP11223 Я нашел описание ошибки на английском, меня интересует другое, почему lazyloading работает не всегда?
Вот, например у меня есть две другие модели
public class Section
    {
        public int Id { get; set; }
        public string SectionName { get; set; }
        public int SectionIndex { get; set; }
        public virtual ICollection<Theme> Theme { get; set; }
    }

public class Theme
    {
        public int ThemeId { get; set; }

        [Display(Name = "Название темы")]
        public string ThemeName { get; set; }
  
        public virtual Section Section { get; set; }
        public int SectionId { get; set; }

    }

И проход по модели Section для получение Theme
@foreach (AuthorizationNew.Models.Section sc in Model)
{
   sc.SectionName 
        @foreach (AuthorizationNew.Models.Theme th in sc.Theme.OrderByDescending(m => m.ThemeDate).Take(3).ToList())
      {
          th.ThemeName
      }
}

И он работает! Спрашивается, в чем разница между тем, что я описал в первом посте?
Ответ написан
Комментировать
wkololo_4ever
@wkololo_4ever Автор вопроса
@AlexP11223 Эм, сейчас добавил ToList() к проходу и все заработало
@foreach (AuthorizationNew.Models.News News in Model.News.ToList())
{
News.NewsArticle 
   Автор @News.User.Email 
}

Это как так? Что он такого делает? Загружает все данные, которые должны загружаться lazyloading?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы