我刚刚开始掌握实体框架,并且没有将简单实体映射到各个表的问题,但现在我遇到了一个让我难过的更高级的情况。
我有以下POCO
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;}
}
在我的模型中,一个Group将有许多EventTypePreferences(每个EventType有一个首选项记录)。 EventTypePreferences是数据库中的一个表,其匹配列与其对应的POCO相同。此外,在数据库中,EventTypePreference表使用基于GroupId和EventTypeId的复合主键。
所以说Group表有以下行(GroupId,GroupName)......
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实体。我看到它,因为这个实体中有很多Group和EventTypes。有人可以帮我解决这个问题吗?
答案 0 :(得分: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);