2016-01-06 45 views
2

配置許多與主鍵一對多的關係太這就是我想實現:如何在它

modelBuilder.Entity<ApplicationUser>()  
        .HasMany(u => u.Following) 
        .WithMany(u => u.Followers) 
        .Map(m => 
          { 
           m.ToTable("FollowTables"); 
           m.MapLeftKey("UserId"); 
           m.MapRightKey("FollowId"); 
          }); 

在應用程序的用戶類別,我已經配置以下和追隨者是這樣的:

public ICollection<ApplicationUser> Following { get; set; } 
public ICollection<ApplicationUser> Followers { get; set; } 

如下表應該是這樣的:

public class FollowTable 
{ 
    [Key] 
    public int autoId { get; set; } 
    public int UserId { get; set; } 
    public int? FollowId { get; set; } 
} 

自動識別是主鍵和用戶ID和FollowId都是外鍵ApplicationUser類其中userid是用戶自己的ID和FollowId是哪個用戶following.Its數據的ID可以如下:

autoId UserId FollowId 
    1  4  11 
    2  4  12 
    3  4  13 

現在,我的問題是,當我通過PMC數據庫更新,它創建兩個數據庫表,一個是帶有列的FollowTables(USerId,FollowId),另一個是FollowTables1(autoId,USerId,FollowId)。

如果我刪除此行從applicationDbContext類:

public DbSet<FollowTable> FollowTables { get; set; } 

那麼它的創建只有一張桌子,但沒有主鍵。

請別人幫我。如何正確配置UserId和followId作爲外鍵,這兩個應映射到ApplicationUser的Id。 我想要使用這些收藏的追隨者和追隨者,以便做到這一點。

+0

你可以顯示你的'ApplicationUser'類嗎?可能會有一些會議事情發生。另外,你爲什麼期望'FollowId'是空的? –

+0

public class ApplicationUser:IdentityUser { public string Address {get;組; } public ApplicationUser() { // this。FollowTables = new HashSet (); } // public virtual ICollection FollowTables {get;組; } //計算屬性 public ICollection 正在關注{get;組; } public ICollection 關注者{get;組; } – duke

回答

1

您必須決定是否要使用表示結點表的實體。如果您不需要爲該表添加任何其他屬性(不包括FK),那麼我建議您不要將交接表映射爲實體。由於Entity Framework將爲您處理該表,因此對您來說更容易。

現在,如果你真的需要映射該表,那麼你需要刪除許多一對多流暢API配置和更改您的導航屬性的類型:

public ICollection<FollowTable> Following { get; set; } 
public ICollection<FollowTable> Followers { get; set; } 

這將創建兩個一與聯結表的多對多關係,這是多對多關係的顯式表示。要做到這一點,你也需要做該實體的一些變化:

public class FollowTable 
{ 
    [Key] 
    public int autoId { get; set; } 

    public int UserId { get; set; } 
    [ForeignKey("User")] 
    public ApplicationUser User{ get; set; } 

    [ForeignKey("Follow")] 
    public int? FollowId { get; set; } 
    public ApplicationUser Follow{ get; set; } 
} 

另外,我不認爲FollowId FK屬性應該是一個可空FK,因爲要代表兩個人之間的關係。

如果你問我的意見,你應該採取什麼選擇,我建議你不要映射交界處表,如果你只有這些屬性。

+0

不得已! thnkx的幫助讓它工作@octavioccl – duke