2015-12-07 135 views
1

之間的多重關係有兩個實體:實體框架:處理兩個實體

  1. 集團
  2. Yuvak - 人

「其他」的人設計的後端誰沒有組。 (null)

一個Yuvak - 人將永遠有一個家庭組。 (1 => 1)並且沒有組可以控制。

一個Nirikshak(頭) - 人將永遠有一個家庭組。 (1 => 1)但他也會有多個組來控制 - GroupsOfNirikshak。 (1 =>多)

A組將具有多個Yuvaks(1 =>多)

和所有組大多將只有一個頭。 (剛開始一個新的組可能不會有任何的頭,但零個或多個yuvaks-人。)

[Table("Group")] 
public class Group 
{ 
    [Key] 
    public int Id { get; set; } 
    .....  
    public virtual List<Yuvak> Yuvaks { get; set; } 
    [ForeignKey("Nirikshak")] 
    public int? NirikshakId { get; set; } 
    public virtual Yuvak Nirikshak { get; set; } 
} 

[Table("Yuvak")] 
public class Yuvak 
{ 
    [Key] 
    public int Id { get; set; } 
    ..... 
    [ForeignKey("HomeGroup")] 
    public int? HomeGroupId { get; set; } 
    public virtual Group HomeGroup { get; set; } 
    public virtual List<Group> GroupsOfNirikshak { get; set; } 
} 

我已經有兩個實體1 => 1的關係(可爲空)提供的兩個外鍵。 現在要管理多對多關係,如果它們不爲null,它應該自動創建具有「Yuvak_Id」和「Group_Id」列的第三個表。但正如這裏FKs是空的; (組:「Yuvak_Id」和Yuvak:「Group_Id」)

我應該怎麼做才能保持Yuvak-HomeGroup應該使用上面提供的只有外鍵和多對多的關係(Head-GroupsOfNirikshak & Group-Yuvaks)它應該創建一個單獨的表。

我可以爲多對多關係創建一個單獨的表:(ID,YuvakID,GroupID)我該怎麼做?

我想這樣做,但有不同的錯誤象下面這樣:

  1. 財產「家庭組」的類型 「YTKGoshthiManagment.Models.Yuvak」聲明的導航已經配置了 衝突的外鍵。
  2. 多重性在'Yuvak_HomeGroup_Target'中的 關係'Yuvak_HomeGroup'中無效。因爲屬性不是關鍵屬性,所以依賴角色的多重性的上界必須是'*'。

.....

等。

回答

1

使用「Fluent API」!

在你的上下文類寫(例如):

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
{ 
    modelBuilder.Entity<Group>() 
       .HasOptional(t => t.Nirikshak) 
       .WithMany(t => t.GroupsOfNirikshak) 
       .HasForeignKey(t => t.NirikshakId); 
} 
0

您可以刪除類和屬性的註釋。一旦你在另一個基於模型的類,實體框架將自動創建一個外鍵關係。它將處理Yuvak作爲Group Graph對象上的一個節點。你不需要聲明註釋,因爲EF會自動爲你做。