2011-03-20 29 views
5

我有一個現有的數據庫。目前我正試圖將我的新實體對象映射到具有實體框架代碼的數據庫中。以下是具有朋友集合的User類。正如你所看到的,這是與同一張表的多對多關係。如何將此關係映射到具有列「user_id」和「friend_id」的表「user_friend」。EF CF手動配置多對多映射

public class User 
{ 
    private ICollection<User> _friends = new List<User>(); 
    public ICollection<User> Friends { get{return _firends;} } 
} 

moduleBuilder.Entity<User>().HasMany????.ToTable("user_friend"); 

回答

6

您需要下降到流暢的API此:

public class User 
{ 
    public int UserId { get; set; } 
    public ICollection<User> Friends { get; set; } 
} 

public class Context : DbContext 
{ 
    public DbSet<User> Users { get; set; } 

    protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     modelBuilder.Entity<User>().HasMany(u => u.Friends).WithMany().Map(c => 
     { 
      c.MapLeftKey(u=>u.UserID, "user_id"); 
      c.MapRightKey(f=>f.FriendID, "friend_id"); 
      c.ToTable("user_friend"); 
     }); 
    } 
} 
+0

謝謝。它在安裝EF RC後工作。還有一個問題。是否有可能將Friends集合映射到一個字段。我想將我的集合公開爲IEnumerable 或ICollection {get {return _friends.AsReadOnly();}}但這是不可能的。 – mynkow 2011-03-21 08:29:15

+0

沒問題。關於你的問題,EF Code First目前不支持映射到一個字段,它必須是一個屬性。如果您將您的財產設爲只讀,Code First將簡單地忽略它。當然,您可以通過定義後臺字段來獲得非自動屬性,但Code First將始終使用屬性而不是字段。 – 2011-03-21 14:19:20

+0

10x,祝你有美好的一天:) – mynkow 2011-03-21 14:27:40