1 mapping entity entity-framework-4.1
我刚刚开始掌握实体框架,并且对简单实体到各个表的映射没有任何问题,但现在我遇到了一个让我难过的更高级的场景.
我有以下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;}
}
Run Code Online (Sandbox Code Playgroud)
在我的模型中,Group将有许多EventTypePreferences(每个EventType有一个首选项记录).EventTypePreferences是数据库中的一个表,其匹配列与其对应的POCO相同.此外,在数据库中,EventTypePreference表使用基于GroupId和EventTypeId的复合主键.
所以说Group表有以下行(GroupId,GroupName)......
1, Human Resources
2, Purchasing
3, Information Services
Run Code Online (Sandbox Code Playgroud)
并且EventType表具有以下行(EventTypeId,EventTypeName,EventColor)...
1, Training Event, Blue
2, Sales Seminar, Red
3, Office Party, Yellow
Run Code Online (Sandbox Code Playgroud)
EventTypePreferences的值为(EventTypeId,GroupId,EventLength)...
1, 1, 60
1, 2, 45
1, 3, 60
2, 1, 120
.........
Run Code Online (Sandbox Code Playgroud)
我的问题是我正在努力弄清楚如何流畅地配置这些关系,特别是对于我的EventTypePreference实体.我看到它,因为这个实体中有很多Group和EventTypes.有人可以帮我解决这个问题吗?
试试这个:
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);
Run Code Online (Sandbox Code Playgroud)