2012-08-27 40 views
0

我設置了這兩個類,我希望實體框架自動爲實體集創建結果多對多關係表。幾個多對多的關係

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

    public ICollection<Event> SignedUpEvents { get; set; } 
    public ICollection<Event> CompletedEvents { get; set; } 
} 

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

    public ICollection<User> SignedUpUsers { get; set; } 
    public ICollection<User> CompletedUsers { get; set; } 
} 

這什麼都不做。我的猜測是,由於指定了兩個關係,並且都具有相同的實體類型,因此EF無法區分這兩個關係。

有沒有辦法做到這一點?也許一些DataAnnotation來命名結果表或什麼?

回答

1

是的,問題是因爲你說它有兩個'事件'集合。

您可以使用DataAnnotations設置雙導航屬性,但是我個人偏好使用模型構建器。這可以讓你的poco類保持清潔並避免不必要的引用。

我寫了一篇關於如何使用模型構建器和how EF navigation properties work的教程,我建議您閱讀它,因爲它會更加深入。

從一個簡單的角度你想要的東西類似如下:

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
     { 
      modelBuilder.Entity<User>().HasMany(e => e.SignedUpEvents) 
       .WithMany(e => e.SignedUpUsers);    
      modelBuilder.Entity<User>().HasMany(e => e.CompletedEvents) 
       .WithMany(e => e.CompletedUsers); 
     } 
+0

就像一個魅力。謝謝。我被其他指定了左/右鍵的示例所拋棄,並且暗示沒有創建表。 –