Mapping 使用Entity Framework 4.1编码First Fluent API来配置具有基于其他两个实体的复合密钥的实体

Mapping 使用Entity Framework 4.1编码First Fluent API来配置具有基于其他两个实体的复合密钥的实体,mapping,entity,entity-framework-4.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;

我刚刚开始掌握实体框架,在将简单实体映射到它们各自的表方面没有问题,但现在我遇到了一个更高级的场景,这让我感到困惑

我有以下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;}
}
并且EventType表具有以下行(EventTypeId、EventTypeName、EventColor)

EventTypePreferences的值为(EventTypeId、GroupId、EventLength)

我的问题是,我正在努力弄清楚如何流畅地配置这些关系,特别是对于我的EventTypePreference实体。我看到它是因为在这个实体中有许多组和事件类型。有人能帮我解释一下吗?

试试这个:

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);
modelBuilder.Entity()
.HasKey(p=>new{p.EventTypeId,p.GroupId});
modelBuilder.Entity()
.HasRequired(p=>p.EventType)
.有很多
.HasForeignKey(p=>p.EventTypeId);
modelBuilder.Entity()
.HasRequired(p=>p.Group)
.WithMany(g=>g.Preferences)
.HasForeignKey(p=>p.GroupId);
试试这个:

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);
modelBuilder.Entity()
.HasKey(p=>new{p.EventTypeId,p.GroupId});
modelBuilder.Entity()
.HasRequired(p=>p.EventType)
.有很多
.HasForeignKey(p=>p.EventTypeId);
modelBuilder.Entity()
.HasRequired(p=>p.Group)
.WithMany(g=>g.Preferences)
.HasForeignKey(p=>p.GroupId);
1, 1, 60
1, 2, 45
1, 3, 60
2, 1, 120
.........
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);