0

我有一個實體在特定條件下排除了相同類型的實體。爲了實現這一點,我有一個實體類,如:實體框架映射多對多與獨立表的自我關係

public class Entity 
{ 
    public int ID { get; set; } 
    public virtual ICollection<EntityExcludedEntity> ExcludedEntities { get; set; } 
} 

public class ExcludedEntity 
{ 
    public int ID { get; set; } 

    [Timestamp] 
    public byte[] RowVersion { get; set; } 

    public int EntityID { get; set; } 
    public virtual Entity Entity { get; set; } 

    public int ExcludedEntityID { get; set; } 
    public virtual Entity ExcludedEntity { get; set; } 
} 

//declared in the ExcludedEntity mapping class. 
public ExcludedEntityMapping() 
{ 
    HasRequired(t => t.Entity).WithMany(t => t.ExcludedEntity).HasForeignKey(t => t.EntityID) 
    HasRequired(t => t.ExcludedEntity).WithMany(t => t.ExcludedEntity).HasForeignKey(t => t.ExcludedEntityID); 
} 

這將導致在EF創建第三列和外鍵字段在我的模型稱爲Entity_ID。似乎它認爲我在這裏定義了另一種關係,但我不明白爲什麼。

這是關係到創建的表中的外鍵的一部分:

.ForeignKey("dbo.Entities", t => t.EntityID) 
.ForeignKey("dbo.Entities", t => t.ExcludedEntityID) 
.ForeignKey("dbo.Entities", t => t.Entity_ID) 
+1

通過'WithRequiredDependent()'你說'Entity'有一個必需的'ExcludedEntity'。它應該是'HasMany(t => t.ExcludedEntities)'。 –

+0

爲什麼這是M:M關係,你的獨立表在哪裏?你能口頭解釋實體之間的關係嗎? – renakre

+0

@erkaner一個實體可以排除許多不同的實體,並且該實體本身可以被許多其他實體排除。 –

回答

0

post幫我找到了答案。

基本上,EF不能有兩個外鍵到同一個實體字段。如果您需要爲同一實體創建兩個外鍵,則應將它們綁定到不同的字段。因此,在這個例子:

public class Entity 
{ 
    public int ID { get; set; } 
    public virtual ICollection<EntityExcludedEntity> ExcludingEntities { get; set; } 
    public virtual ICollection<EntityExcludedEntity> ExcludedFromEntities { get; set; } 
} 

與此配置:

public DBConceptAnswerExcludedAnswerMapping() 
{ 
    HasRequired(t => t.Entity).WithMany(t => t.ExcludingEntities).HasForeignKey(t => t.EntityID); 
    HasRequired(t => t.ExcludedEntity).WithMany(t => t.ExcludedFromEntities).HasForeignKey(t => t.ExcludedEntityID); 
} 

可以解決這個問題。