2014-12-06 35 views
0

考慮名爲List的實體可以容納多個用戶的場景。在Code First中指定關聯表

public class List{ 
    public int Id{get;set;} 

    public string Name{get;set;} 

    public virtual List<User>Users{get;set; 

} 

public class User{ 
    public int Id{get;set;} 

    public string Name{get;set;} 

    public virtual List<List>List{get;set; 

} 

我在我的數據庫中有一個名爲ListUserAssociation的關聯表,它包含多個記錄。

表中有2列ListId和用戶ID

如何指定該協會在EF代碼第一次?

P.S。我不能刪除並重新創建表格。

+0

你可以提供更多關於你想要做什麼的信息嗎?當你做user.List或者list.Users時,EF將使用查找表來完成這個數據獲取 - 它不需要被指定爲你的代碼優先模型的一部分,因爲從關係到面向對象的EF映射 – Carl 2014-12-06 08:56:36

回答

0

既然你有兩邊定義的集合,你可以定義從兩邊的關係:

modelBuilder.Entity<List>().HasMany(e => e.Users).WithMany(e => e.List).Map(ca => ca.MapLeftKey(new string[] {"ListId"}).MapRightKey(new string[] {"UserId"}).ToTable("ListUserAssociation"); 
modelBuilder.Entity<User>().HasMany(e => e.List).WithMany(e => e.Users).Map(ca => ca.MapLeftKey(new string[] {"UserId"}).MapRightKey(new string[] {"ListId"}).ToTable("ListUserAssociation"); 

我相信,你只需要一條線或其他以定義關係。即使它是多餘的,我更喜歡包含兩行,以便我看到從任一實體定義的關係(我將所有映射代碼放置在每個實體的單獨類中)。