Многозначная проблема с именем столбца - EF Core - PullRequest
0 голосов
/ 21 мая 2019

У меня проблема со многими отношениями в ядре EF.У меня есть следующие модели:

   public class Institution
    {
        [Key]
        public int Id { get; set; }

        [JsonIgnore]
        public virtual ICollection<InstitutionDepartment> InstitutionDepartments { get; set; }
    }


    public class InstitutionDepartment
    {
        [Column("Institution_Id")]
        public int InstitutionId { get; set; }
        [Column("Department_Id")]
        public int DepartmentId { get; set; }

        public Institution Institution { get; set; }
        public Departments Department { get; set; }
    }

    public class Departments
    {
        [Key]
        public int Id { get; set; }
        public string Name { get; set; }
        public bool Published { get; set; }

        [JsonIgnore]
        public virtual ICollection<InstitutionDepartment> InstitutionDepartments { get; set; }
    }

Я следовал многим учебным пособиям, объясняющим, как правильно сопоставить эти классы:

     modelBuilder.Entity<InstitutionDepartment>()
        .HasKey(x => new { x.DepartmentId, x.InstitutionId});

    modelBuilder.Entity<InstitutionDepartment>()
        .HasOne(pt => pt.Institution)
        .WithMany(p => p.InstitutionDepartments)
        .HasForeignKey(pt => pt.InstitutionId);

    modelBuilder.Entity<InstitutionDepartment>()
        .HasOne(pt => pt.Department)
        .WithMany(t => t.InstitutionDepartments)
        .HasForeignKey(pt => pt.DepartmentId);

Я написал свой запрос:

    var institutions = _context.Institutions
        .Include(i => i.InstitutionDepartments)
        .ThenInclude(id => id.Department);

Но что бы я ни делал, я получаю следующую ошибку: Invalid column name 'InstitutionId'.

Может кто-нибудь сказать мне, что я здесь делаю неправильно?D:

Примечание Я не получу сообщение об ошибке, если не напишу часть .ThenInclude(id => id.Department);.Но это делает данные неполными

1 Ответ

0 голосов
/ 21 мая 2019

Проблема возникла из-за строки кода, которую я тогда не считал релевантной (в следующий раз я узнаю лучше)

Это было в модели Institution без аннотации [NotMapped]:

        [NotMapped]
        public IEnumerable<Departments> Departments
            => InstitutionDepartments?.Select(o => o.Department);

Это заставляло EF искать пропавшую связь Один-ко-многим между Institution и Department

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