1
我有兩個實體。每一個都有一個導航到另一個,所以EF自動創建一個m2m映射表。我的課程是Activity和Trip,所以EF創建ActivityTrip來映射關係。這是美好的 - 但:EF 5.0代碼第一 - 許多關係 - 流利的API - 覆蓋我自己生成的mm表
我需要在這些關係記錄中有額外的數據,所以想提供我自己的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仍然產生它與FKS爲M2M關係自己ActivityTrip表。 EF然後用我的兩個主鍵和額外的字段爲我編碼的第一個ActivityTrip實體生成另一個ActivityTrip1表。
看不到我想要控制m2m表的生成。並將外鍵映射到我的表。我顯然這樣做不對 - 請大家指教...
感謝, 格里
感謝您的快速回復。我會這樣做,看看它是如何工作的。但是 - 問題 - 我瞭解自動生成的聯結表中的其他數據不受支持。但是我不能指定和映射我想要用於關係的我自己的表 - 只要我正確配置它?我認爲這就是配置和映射關係時流暢的API的全部內容?這不是您在映射到現有數據庫時遇到的情況嗎? – Gerry
您可以使用自己的聯結表,但對於EF而言,它不是使用Map fluent API方法作爲多對多建模的,但正如使用HasRequired/Optional和HasMany fluent API的兩個一對多關係一樣方法。這在對象模型中也是有意義的,否則這些附加數據將被存儲在哪裏? – devdigital