2012-07-16 57 views
0

我有一個示例代碼:EF多到許多具有兩個屬性

public class Tag 
{ 
    public int TagId { get; set; } 
    public virtual ICollection<User> Users { get; set; } 
} 

public class User 
{ 
    public int UserId { get; set; } 
    public virtual ICollection<Tag> Tags { get; set; } 
} 

當我在我的模型上運行EF(我使用代碼第一種方法),我得到了我的數據庫中自動創建一些表:

Users 
Tags 
UserTagUsers <-- junction table for many-to-many relationship 

這是好,直到我決定增加一個屬性的用戶實體:在這種情況下EF根兒

public class User 
{ 
    public int UserId { get; set; } 
    public virtual ICollection<Tag> Tags { get; set; } 
    public virtual ICollection<Tag> Tags2 { get; set; } 
} 

ates完全不同的關係,它刪除UserTagUsers聯結表,但爲標籤表添加一些額外的屬性,以使它成爲一對一的映射。

我該如何明確地告訴EF使屬性Tags和Tags2成爲多對多?

回答

1

使用流暢API來配置映射

modelBuilder.Entity<User>() 
    .HasMany(u => u.Tags).WithMany(t => t.Users) 
    .Map(m => 
    { 
     m.ToTable("UserTags"); 
     m.MapLeftKey("UserId"); 
     m.MapRightKey("TagId"); 
    }); 

    modelBuilder.Entity<User>() 
    .HasMany(u => u.Tags2).WithMany(t => t.Users2) 
    .Map(m => 
    { 
     m.ToTable("UserTags2"); 
     m.MapLeftKey("UserId"); 
     m.MapRightKey("TagId"); 
    });