EF 5.0 Code First - manytomany relationship - 流畅的api - 用我自己的方式覆盖生成的mm表

时间:2013-07-18 09:15:04

标签: entity-framework api fluent cfml

我有两个实体。每个都有一个导航道具到另一个,所以EF自动创建一个m2m映射表。我的类是Activity和Trip,因此EF创建ActivityTrip来映射关系。这太棒了 - 但是:

我需要在这些关系记录中有额外的数据,所以想要提供我自己的m2m表并使用流畅的api将关系映射到此表而不是自动生成的表。

以下是我的课程:

public class Activity
{
    public int Id { get; set; }
    public string Name { get; set; }
    public virtual ICollection<Trip> Trips { get; set; }
}

public class Trip
{
    public int Id { get; set; }
    public string Name { get; set; }
    public virtual ICollection<Activity> Activities { get; set; }
}

public class ActivityTrip //Want to use my own manytomany join table with extra fields
{
    public int ActivityId { get; set; }
    public int TripId { get; set; }
    //Extra data
    public string ActivityTripType { get; set; }
}

以下是我的配置:

public class ActivityConfiguration : EntityTypeConfiguration<Activity>
{
    public ActivityConfiguration()
    {
        HasKey(p => p.Id);
        HasMany(t => t.Trips)
        .WithMany(a => a.Activities)
        .Map(m =>
        {
            m.ToTable("ActivityTrip");
            m.MapLeftKey("ActivityId");
            m.MapRightKey("TripId");
        });
    }
}

public class TripConfiguration : EntityTypeConfiguration<Trip>
{
    public TripConfiguration()
    {
        HasKey(p => p.Id);
    }
}

public class ActivityTripConfiguration : EntityTypeConfiguration<ActivityTrip>
{
    public ActivityTripConfiguration()
    {
        HasKey(p => new { p.ActivityId, p.TripId });
    }
}

EF仍会生成自己的ActivityTrip表,其中包含m2m关系的FK。 EF然后使用我的两个主键和额外字段为我编码的第一个ActivityTrip实体生成另一个ActivityTrip1表。

我没有看到我想控制m2m表的生成。并将外键映射到我的表。我显然做错了 - 请指教......

谢谢, 格里

1 个答案:

答案 0 :(得分:-1)

EF不支持联结表中的其他数据,因此您需要将数据视为另一个实体。

换句话说,两个一对多关系与另一个实体表示联结表中的记录。

您有其他实体类型 - ActivityTrip - 但您需要建模两个一对多关系。