2011-07-25 131 views
1

我正在使用實體框架4代碼的第一種方法來設計我的數據庫在ASP MVC 3,我碰到了一點麻煩。我有如下一個POCO類:一對一加多對多關係與同一個對象不正確構建

public class User 
{ 
    [Key] 
    public Guid UserID { get; set; } 
    public string UserName { get; set; } 
    public DateTime CreationDate { get; set; } 
    public string Email { get; set; } 
    public int Points { get; set; } 
    public Session ActiveSession { get; set; } 
    public ICollection<Session> InSessions { get; set; } 
} 

Session如別處定義我的模型類的另一個之一,ICollection<User>作爲它的一個屬性。如果我從User類中刪除public Session ActiveSession { get; set; }屬性,則多對多映射和UserSessions中間表構造正確,但是當我將一對一映射添加回來時,它會中斷多對多映射和中間表不構成。相反,Users表具有和InSessions屬性的Sessions表中的單個外鍵。任何想法爲什麼發生這種情況?

+0

你能證明你的映射代碼? – Eranga

+0

@Eranga上面是非常多的。我使用的是代碼優先的方法,所以我沒有一個edmx模型,到目前爲止我不需要使用任何映射流暢的API或屬性。 EF正在爲我建立我的數據庫,所以我不必映射到任何現有的表。 – Kongress

回答

3

以你的情況EF認爲ICollection<User>Session類是Many結尾由ActiveSession創建的一對多關係。

所以,你需要配置mannualy

modelBuilder.Entity<User>().HasOptional(u => u.ActiveSession) 
    .WithMany() 
    .Map(u => u.MapKey("ForeignKeyColumn")); 

modelBuilder.Entity<User>() 
    .HasMany(u => u.InSessions) 
    .WithMany(s => s.Users) 
    .Map(m => 
     { 
      m.ToTable("UserSessions"); 
      m.MapLeftKey("UserID"); 
      m.MapRightKey("SessionID"); 
     });