我有两个实体。每个都有一个导航道具,因此 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 表的生成。并将外键映射到我的表。我显然做错了-请告知...
谢谢,格里