Entity framework 实体框架向自引用多对多链接添加额外的不正确链接

Entity framework 实体框架向自引用多对多链接添加额外的不正确链接,entity-framework,entity-framework-6,Entity Framework,Entity Framework 6,我有一个表,它以多对多自联接的方式链接到自身。表已正确创建,但Entity Framework正在链接表中添加一个额外的Entity_ID字段 CREATE TABLE dbo.LinKTable ( EntityAID int NOT NULL, EntityBID int NOT NULL, Entity_ID int NULL, <-- This should not be here. Active bit NOT NULL ) DB

我有一个表,它以多对多自联接的方式链接到自身。表已正确创建,但Entity Framework正在链接表中添加一个额外的Entity_ID字段

CREATE TABLE dbo.LinKTable
(
    EntityAID int NOT NULL,
    EntityBID int NOT NULL,
    Entity_ID int NULL,         <-- This should not be here.
    Active bit NOT NULL
)
DBContext

modelBuilder.Entity<Entity>().ToTable("Entity", "dbo").HasKey(am => new { am.EntityAID, am.EntityBID });
modelBuilder.Entity<Entity>().HasRequired(am => am.EntityA).WithMany().HasForeignKey(am => am.EntityAID).WillCascadeOnDelete(false);
modelBuilder.Entity<Entity>().HasRequired(am => am.EntityB).WithMany().HasForeignKey(am => am.EntityBID).WillCascadeOnDelete(false);
modelBuilder.Entity().ToTable(“Entity”,“dbo”).HasKey(am=>new{am.EntityAID,am.EntityBID});
modelBuilder.Entity().HasRequired(am=>am.EntityA).WithMany().HasForeignKey(am=>am.EntityAID).WillCascadeOnDelete(false);
modelBuilder.Entity().HasRequired(am=>am.EntityB).WithMany().HasForeignKey(am=>am.EntityBID).WillCascadeOnDelete(false);
编辑:


这就是我试图建立的模型。一个实体链接到另一个附加属性为active的实体。这是一个具有附加属性的多对多关系(一个实体可以链接到许多其他实体)。

我认为问题在于,在一对多关系之一的配置中,您没有使用
实体
类中的
链接
导航属性。EF隐式地创建另一个一对多关系(在本例中是单向的)。这就是它在
链接表中添加FK列作为该关系的一部分的方式

您应该使用
链接
导航属性并添加一个新属性,以正确配置您已有的一对多关系:

public class Entity
{
  public int ID { get; set; }
  public virtual ICollection<LinkTable> Links { get; set; }
  // Change the name what you want
  public virtual ICollection<LinkTable> AnotherLinks { get; set; }
}

项目中是否有edmx文件?如果是的话,我能看到它的图片吗?我先用代码,所以没有edmx。我试图对我在数据库中所做的事情进行建模,我认为这是通过实体框架修复SQL本身中的多对多关系来实现的,因为我使用了数据库优先的方法以及SQL或任何您正在使用的数据库。我添加了额外的表来修复两个多对多关系,但在edmx文件中,它只显示多对多表,而不是固定的一对多表。这可能是因为为了在数据库中正确保存,它添加了它
modelBuilder.Entity<Entity>().ToTable("Entity", "dbo").HasKey(am => new { am.EntityAID, am.EntityBID });
modelBuilder.Entity<Entity>().HasRequired(am => am.EntityA).WithMany().HasForeignKey(am => am.EntityAID).WillCascadeOnDelete(false);
modelBuilder.Entity<Entity>().HasRequired(am => am.EntityB).WithMany().HasForeignKey(am => am.EntityBID).WillCascadeOnDelete(false);
public class Entity
{
  public int ID { get; set; }
  public virtual ICollection<LinkTable> Links { get; set; }
  // Change the name what you want
  public virtual ICollection<LinkTable> AnotherLinks { get; set; }
}
modelBuilder.Entity<LinkTable>().HasRequired(am => am.EntityA).WithMany(e=>e.Links).HasForeignKey(am => am.EntityAID).WillCascadeOnDelete(false);
modelBuilder.Entity<LinkTable>().HasRequired(am => am.EntityB).WithMany(e=>e.AnotherLinks).HasForeignKey(am => am.EntityBID).WillCascadeOnDelete(false);