列名称的多对多关系问题-EF Core

时间:2019-05-21 09:28:07

标签: c# entity-framework .net-core

我在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 :(得分:0)

问题出在我当时认为不相关的一行代码(下次我会知道的)

这是在Institution模型中,没有[NotMapped]批注:

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

这导致EF在InstitutionDepartment之间寻找缺少的一对多关系