Данные Entity Framework Core 3.1.2 не возвращаются с помощью .Include ()

Мои 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 Server выдается 2 отдельных оператора select хотя в моем коде есть только 1 запрос к DbSet.

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

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

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

Всего 2 ответа


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

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

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


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


Есть идеи?

10000