Получить ребенка вместе с родителем - PullRequest
0 голосов
/ 19 февраля 2020

Рассмотрим следующие два класса School и Student. Школа получила коллекцию учеников. Также ученик связался со школой, которая не отображается

public class School
{
    public int Id { get; set; }
    public virtual ICollection<Student> students { get; set; }
}

public class Student
{
    public int Id { get; set; }
    public int SchoolId { get; set; }
    public string Name { get; set; }
    public bool Deleted { get; set; }
    public virtual School School { get; set; }
}

Мой модельер выглядит следующим образом

modelBuilder.Entity<School>()
        .HasMany(obj => obj.students)
        .WithOne()
        .HasForeignKey(obj => obj.SchoolId)
        .OnDelete(DeleteBehavior.Cascade)
        .IsRequired();

modelBuilder.Entity<Student>(entity =>
{
    entity.HasOne(e => e.School);
});

Что сработало -

var result = mydbcontext.Schools
                        .Include(d => d.students)
                        .Where(d => d.Id == 1)
                        .Select(x => new School
                        {
                            Id = x.Id,
                            students = x.students.Where(s => !s.Deleted).ToList()
                        })
                        .AsNoTracking()
                        .ToList();

Что НЕ работает -

var school = mydbcontext.Students
                        .Include(x => x.School) //returning null
                        .Where(s => !s.Deleted)
                        .ToList();

Когда я попробовал вышеуказанный код, я получаю всех учеников, которые не были удалены, но я получаю Empty результаты для школы

Я что-то здесь упускаю?

1 Ответ

1 голос
/ 19 февраля 2020

Вероятно, это связано с вашим атрибутом [NotMapped] в свойстве Student class School. Использование этого атрибута указывает EF не создавать в базе данных соответствующий столбец для записи записи Student обратно в запись School, поэтому EF не сможет вывести отношение Student -> School, только School -> Students отношение.

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