2011-08-04 106 views
1

我剛剛開始掌握實體框架,並且沒有將簡單實體映射到它們的問題個人桌子,但現在我已經跑了一個更先進的場景,讓我難住。使用Entity Framework 4.1 Code First Fluent API根據兩個其他實體配置具有複合鍵的實體

我有以下波蘇斯

public class Group 
{ 
    public int GroupId {get; set;} 
    public string GroupName {get; set;} 
    public virtual ICollection<EventTypePreference> Preferences {get; set;} 
} 

public class EventType 
{ 
    public int EventTypeId {get; set;} 
    public string EventTypeName {get; set;} 
    public string EventColor {get; set;} 
} 

public class EventTypePreference 
{ 
    public int GroupId {get; set;} 
    public int EventTypeId {get; set;} 

    public virtual Group Group {get; set;} 
    public virtual EventType EventType {get; set;} 
    public int EventLength {get; set;} 
} 

在我的模型組會有很多EventTypePreferences(每個事件類型一個喜好紀錄)。 EventTypePreferences是數據庫中的一個表,具有與其對應的POCO相同的匹配列。此外,在數據庫中,EventTypePreference表使用基於GroupId和EventTypeId的組合主鍵。

所以說,該集團表具有以下行(GroupId的,組名)...

1, Human Resources 
2, Purchasing 
3, Information Services 

並將eventtype表具有以下行(EventTypeId,EventTypeName,EventColor)...

1, Training Event, Blue 
2, Sales Seminar, Red 
3, Office Party, Yellow 

的EventTypePreferences將有值(EventTypeId,GroupId的,EventLength)...

1, 1, 60 
1, 2, 45 
1, 3, 60 
2, 1, 120 
......... 

我的問題是,我正在努力弄清楚如何流利地配置這些關係,特別是對於我的EventTypePreference實體。我看到它,因爲此實體中有許多組和事件類型。有人能幫我解釋一下嗎?

回答

8

試試這個:

modelBuilder.Entity<EventTypePreference>() 
      .HasKey(p => new { p.EventTypeId, p.GroupId }); 

modelBuilder.Entity<EventTypePreference>() 
      .HasRequired(p => p.EventType) 
      .WithMany() 
      .HasForeignKey(p => p.EventTypeId); 

modelBuilder.Entity<EventTypePreference>() 
      .HasRequired(p => p.Group) 
      .WithMany(g => g.Preferences) 
      .HasForeignKey(p => p.GroupId); 
相關問題