1

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

我需要在这些关系记录中有额外的数据,所以想提供我自己的 m2m 表并使用 fluent 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 表的生成。并将外键映射到我的表。我显然做错了-请告知...

谢谢,格里

4

1 回答 1

-1

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

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

您有额外的实体类型 -ActivityTrip但您需要对两个一对多关系进行建模。

于 2013-07-18T09:19:27.303 回答