2014-01-14 59 views
1

我開始一個新的ASP.Net MVC 5項目,並使用EF5和Code First。由於我是EF新手,我想弄清楚如何設置兩個類之間的關係,以便按照我想要的方式工作。實體框架與訂購的一對多關係

我正在模擬一個「測試」。有一個Test類和一個Questions類。用戶通過添加一個或多個問題並設置問題順序來構建測試。因此,我們不僅在測試和問題之間建立了一對多關係,而且還針對給定測試對這些問題進行了手動排序(問題來自通用池,教師可以從該池構建單個測試,但要訂購問題他們想如何),

我明白如何在EF中獲得正常的,基本的一對多關係。但是如何處理這種關係中的排序呢?我是否創建了自己的「鏈接」類,而不是讓EF爲我構建鏈接表?我可以調整Data Annotations或Fluent API中的某些內容來完成這項工作(我一直使用DA而不是Fluent,但願意使用它,如果有幫助的話)。

回答

1

如果不同的用戶可以按不同的順序使用相同的問題,那麼您應該在測試和問題之間創建鏈接表(實體),這將保持問題的順序。事情是這樣的:

public class Test 
{ 
    // ... 
    public virtual ICollection<TestQuestion> Questions { get; set; } 
} 

public class TestQuestion 
{ 
    public virtual Test Test { get; set; } 
    public virtual Question Question { get; set; } 
    public int Order { get; set; } 
} 

public class Question 
{ 
    // ... 
} 

和映射的樣子:

modelBuilder.Entity<Test>() 
      .HasMany(t => t.Questions) 
      .WithRequired(tq => tq.Test); 

modelBuilder.Entity<TestQuestion>() 
      .HasRequired(tq => tq.Question) 
      .WithOptional();