我有两个实体。每个都有一个导航道具到另一个,所以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表的生成。并将外键映射到我的表。我显然做错了 - 请指教......
谢谢, 格里
答案 0 :(得分:-1)
EF不支持联结表中的其他数据,因此您需要将数据视为另一个实体。
换句话说,两个一对多关系与另一个实体表示联结表中的记录。
您有其他实体类型 - ActivityTrip
- 但您需要建模两个一对多关系。