我有同樣的問題。我所做的工作就是創建另一個派生的DbContext來專門處理連接。我:
public class JoinContext : DbContext
{
internal JoinContext() : base("name=SampleConnectionString")
{
PreventErrorIfDatabaseSchemaChanges();
// Get the ObjectContext related to this DbContext
var objectContext = (this as IObjectContextAdapter).ObjectContext;
}
public DbSet<StudentImage> StudentImages { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<StudentImage>()
.ToTable("StudentImages");
.HasKey(joinTable => new { joinTable.StudentId, joinTable.ImageId });
base.OnModelCreating(modelBuilder);
}
private static void PreventErrorIfDatabaseSchemaChanges()
{
Database.SetInitializer<JoinContext>(null);
}
}
我離開了其他應用程序上下文與學生/圖像多對多連接映射照原樣。不要忘記爲連接表指定一個複合鍵(參考上面的HasKey方法),否則EF在數據庫初始化時炸彈。
之後,你有你的特殊加入背景下,使用存儲庫訪問此背景下獲取或設置所需的字段映射從連接表:
public class StudentRepository
{
public int GetImageSortOrder(int studentId, int imageId)
{
var joinContext = new JoinContext();
var joinTuple = joinContext.StudentImages.Find(studentId, imageId);
return joinTuple.SortOrder;
}
}
希望這有助於!
您不能將列添加到任何一個表中嗎?你真的需要添加到連接表嗎? –
我想我是。有A和B,A是一組圖像,B是一組問題。每個圖像都可能有多個問題。在映射表中,我想添加正確的答案。我看不出如何將其添加到任何一個表格中。並且創建新表格沒有意義,因爲它確實是特定關係的共享屬性。 –
這不是一對多的關係嗎? –