2012-10-01 38 views
2

我正在使用最新的實體框架,並遇到了多對多關係時,我想創建一個額外的列的問題。額外列在多對多關係在實體框架5.0審查

的問題是在這個較早的帖子提出了同樣的: EF Code First Additional column in join table for ordering purposes

是今天仍然是問題,即一個人不能沒有鬆動的多對多關係船(鏈接從對象A到B添加一個額外的列作爲AB,因爲映射變得和實體它自己)?

什麼是一輪工作?

  1. 查一查A類,我需要再查詢映射表where(e=>e.A == a)讓我Bs的一個?當我需要額外的柱子時,我會做MappingTable.find(a,b)
  2. 是否有其他建模選項,linq to sql會使它更容易?
+0

您不能將列添加到任何一個表中嗎?你真的需要添加到連接表嗎? –

+0

我想我是。有A和B,A是一組圖像,B是一組問題。每個圖像都可能有多個問題。在映射表中,我想添加正確的答案。我看不出如何將其添加到任何一個表格中。並且創建新表格沒有意義,因爲它確實是特定關係的共享屬性。 –

+0

這不是一對多的關係嗎? –

回答

0

據我所知,事情並沒有因EF 5而改變。您需要按照鏈接說的去做。我喜歡堅持EF易於使用,但這只是我的意見...

+0

悲傷的熊貓!是解決方案,然後執行一個普通的許多到多個,並創建一個入口映射表的外鍵。 (從一個SQL視圖這聽起來很愚蠢)是否有可能創建一個正常的多對多,然後添加沒有實體框架的專欄知道它,並建模一個額外的實體映射到表沒有導航鏈接? –

+0

@ s093294 - 試試看並找出答案。請報告你的發現。 –

+0

我做了:http://stackoverflow.com/questions/12666608/how-do-i-assosiate-my-pico-class-with-a-specific-table-in-my-database-with-entit和問題是我不知道如何告訴它使用已經存在的表,而不是創建它。獲取它無法創建它的錯誤,因爲它已經存在 –

0

我有同樣的問題。我所做的工作就是創建另一個派生的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; 
    } 
} 

希望這有助於!