Данные Entity Framework Core 3.1.2 не возвращаются с помощью .Include () - PullRequest
0 голосов
/ 25 марта 2020

Мои 2 сущности имеют простое отношение один-ко-многим, то есть родительские дочерние.

    public class Itinerary {
        public Itinerary() {
            CodeHours=new List<CodeHours>();
        }

        public int Id { get; set; }
        public String FirstName { get; set; }
        public String LastName { get; set; }
        public DateTime DateWorked { get; set; }
        public String EnteredBy { get; set; }
        public List<CodeHours> CodeHours { get; set; }
    }

public class CodeHours {
        public int Id { get; set; }
        public String Code { get; set; }
        public float Hours { get; set; }
        public Itinerary Itinerary { get; set; }
        public int ItineraryId { get; set; }

    }

    public class DBContext : DbContext {
        public DbSet<Itinerary> Itineraries { get; set; }
}

Я получаю Itinerary из его DbSet следующим образом

            Itinerary itn = ctx.Itineraries.Where(i => i.FirstName == Model.FirstName
            && i.LastName == Model.LastName
             && i.DateWorked == row.Date
            ).Include(i => i.CodeHours)
            .FirstOrDefault();

Я получаю правильный Itinerary, но его CodeHours всегда пуст. SQL Server Profiler указывает, что таблица CodeHours никогда не включается в запрос с любопытством. Я вижу, что на сервер SQL выдается 2 отдельных оператора select, хотя в моем коде только 1 запрос к DbSet.

Добавление CodeHours DbSet к моему DbContext не имеет значения.

Приложение ASP. NET MVC 5. Аналогичный пример из курса EF Core 3 работает, но он это консольное приложение, а не ASP. NET MVC

Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 26 марта 2020

Мне удалось заставить код работать как есть, создав новый проект с нуля и скопировав соответствующие артефакты из текущего нерабочего проекта. Я думаю, что проект, возможно, был поврежден, когда я первоначально добавил EF 6, но позже переключился на использование EF Core 3. Не уверен, что я удалил EF 6 перед добавлением EF Core 3.

0 голосов
/ 25 марта 2020

Не уверен, что это является причиной вашей проблемы, но в вашем классе Itinerary тип CodeHours неправильный. Должно быть:

public ICollection<CodeHours> CodeHours { get; set; }

Можно инициализировать его в конструкторе List<CodeHours>, когда вы создаете новые объекты в памяти, но когда вы выбираете из БД, EF поместит свой собственный Коллекция там.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...