C# 将多对多关系与一对一关系合并

C# 将多对多关系与一对一关系合并,c#,sql,entity-framework,asp.net-mvc-4,C#,Sql,Entity Framework,Asp.net Mvc 4,我有一个公司类,有一个部门列表和一个主要部门: 但是,当我向公司添加新部门时,新部门不会插入到表CompanySectors中: 如何在同一个表中建立多对多关系和一对一关系。 提前感谢您的问题在于将导航属性设置为“列表”类型。它们需要被收集起来。一旦您解决了这个问题,EntityFramework将拿起M2M并创建必要的联接表。手动添加表(您自己)没有任何作用,因为Entity Framework仍然不知道这种关系,事实证明它没有创建表本身。谢谢您的回答,但是List和ICollection之间

我有一个公司类,有一个部门列表和一个主要部门:

但是,当我向公司添加新部门时,新部门不会插入到表CompanySectors中:

如何在同一个表中建立多对多关系和一对一关系。
提前感谢

您的问题在于将导航属性设置为“列表”类型。它们需要被收集起来。一旦您解决了这个问题,EntityFramework将拿起M2M并创建必要的联接表。手动添加表(您自己)没有任何作用,因为Entity Framework仍然不知道这种关系,事实证明它没有创建表本身。

谢谢您的回答,但是List和ICollection之间有什么区别,我的意思是,如果是List,为什么Entity Framework不创建联接表,在我添加主扇区之前,我的代码运行良好,我的意思是EF创建了联接表,但当添加主扇区时,EF删除了我的表:这都是非常低级的,但仅仅是一个列表就需要立即评估查询,这与实体框架关系处理相冲突。不幸的是,这不起作用,即使我使用ICollection而不是List。即使我使用了一个列表,EF也正确地创建了联接表,但是当我像下面的代码那样向公司添加主扇区时,新的迁移删除了联接表:public override void Up{DropForeignKeydbo.CompanySectors,Company_Id,dbo.Companys;DropForeignKeydbo.CompanySectors,Sector_Id,dbo.Sectors;DropIndexdbo.CompanySectors,new[]{Company_Id};……DropTabledbo.CompanySectors;}
public class Company 
{
   public virtual List<Sector> Sectors {get; set;}
   [DisplayName("MainSectorId")]
   [ForeignKey("MainSector")]
   public virtual int? MainSectorId { get; set; }
   public virtual Sector MainSector { get; set; }
}

public class Sector
{
  public List<Company> Companies {get; set; }
}
    CreateTable(
        "dbo.CompanySectors",
        c => new
            {
                Company_Id = c.Int(nullable: false),
                Sector_Id = c.Int(nullable: false),
            })
        .PrimaryKey(t => new { t.Company_Id, t.Sector_Id })
        .ForeignKey("dbo.Companies", t => t.Company_Id, cascadeDelete: true)
        .ForeignKey("dbo.Sectors", t => t.Sector_Id, cascadeDelete: true)
        .Index(t => t.Company_Id)
        .Index(t => t.Sector_Id);
        companyDB.MainSector = sectorDB;
        companyDB.MainSectorId = sectorDB.Id;
        EntityRepository.dbContext.Entry(companyDB).State = System.Data.Entity.EntityState.Modified;
        EntityRepository.dbContext.Entry(sectorDB).State = System.Data.Entity.EntityState.Modified;
        EntityRepository.dbContext.SaveChanges();