2011-11-15 65 views
19

我是EF新手,嘗試使用代碼優先方法獲得多對多單向關係。例如,如果我有以下兩個類(不是我的真實模型),它們之間存在N * N關係,但沒有來自「客戶」一側的導航屬性。使用Code First Entity Framework進行單向多對多實現

public class User { 
    public int UserId { get; set; } 
    public string Email { get; set; } 
    public ICollection TaggedCustomers { get; set; } 
} 
public class Customer { 
    public int CustomerId { get; set; } 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 
}

映射代碼看起來像......

modelBuilder.Entity() 
     .HasMany(r => r.TaggedCustomers) 
     .WithMany(c => c.ANavgiationPropertyWhichIDontWant) 
     .Map(m => 
     { 
      m.MapLeftKey("UserId"); 
       m.MapRightKey("CustomerId"); 
       m.ToTable("BridgeTableForCustomerAndUser"); 
     });

這句法強迫我有 「WithMany」 爲 「客戶」 實體。 以下url表示,「按照慣例,Code First始終將單向關係解釋爲一對多關係。」

是否可以重寫它,還是應該使用其他方法?

回答

35

使用此:

modelBuilder.Entity<User>() 
    .HasMany(r => r.TaggedCustomers) 
    .WithMany() // No navigation property here 
    .Map(m => 
     { 
      m.MapLeftKey("UserId"); 
      m.MapRightKey("CustomerId"); 
      m.ToTable("BridgeTableForCustomerAndUser"); 
     }); 
+1

非常感謝,有什麼簡單的解決方案:

public class User { public int UserId { get; set; } public string Email { get; set; } // You must use generic collection public virtual ICollection<Customer> TaggedCustomers { get; set; } } public class Customer { public int CustomerId { get; set; } public string FirstName { get; set; } public string LastName { get; set; } } 

而且隨着映射。爲了挽救我的面子,我會責怪它缺乏文件,而不是我自己的無知。 –

+0

是否有可能通過屬性來做到這一點? – TDaver

+0

@TDaver:不,只有在兩端都具有導航屬性並且不期望控制聯結表中的名稱和列時,才能使用屬性。 –

相關問題