2016-05-11 93 views
0

我正在使用實體框架7 RC1,我基本上試圖創建一個領域,以便我可以舉行學生標準(一個學生可以有很多標準,每個標準可以屬於很多學生)。在asp.net文檔之後,我設置了表格,並且使用一些組成的數據在SQL Server中手動填寫了Student表格,Standard表格和StudentStandard表格。但是,當我在運行時調試代碼/視圖時,我發現當我在控制器中執行getAll時,StudentStandards字段爲'null'。我使用下面的代碼在視圖中訪問此字段:model.Students.StudentStandards.Select(c => c.StandardId),但是這不提供任何內容。EF 7多對多的關係沒有FK連接器表

public class Student 
{ 
    public int StudentID { get; set; } 
    public string StudentName { get; set; } 
    public DateTime DateOfBirth { get; set; } 
    public byte[] Photo { get; set; } 
    public decimal Height { get; set; } 
    public float Weight { get; set; } 

    public ICollection<StudentStandard> StudentStandards { get; set; } 

} 

public class StudentStandard 
{ 
    [ForeignKey("Student")] 
    public int StudentId { get; set; } 
    public Student Student { get; set; } 

    [ForeignKey("Standard")] 
    public int StandardId { get; set; } 
    public Standard Standard { get; set; } 
} 

public class Standard 
{ 

    public int StandardId { get; set; } 
    public string StandardName { get; set; } 

    public ICollection<StudentStandard> StudentStandards { get; set; } 
} 

這是表的樣子使用遷移來創建它後:

SQL server tables and columns

我的問題:我怎麼得到這個M:M關係的關係來存儲和檢索這些數據?

回答

0

我不得不急於加載表:

context.Students 
    .Include(a => a.StudentStandards) 
    .ThenInclude(b => b.Standard); 
1

你在做什麼後被稱爲急切加載。默認情況下,任何EF查詢都將獲取實體本身的記錄,但不會獲取屬於它的外鍵表。如果你有興趣引入相關的表格數據,你應該使用Include()函數,並指定你感興趣的外鍵表格,在你的案例中的標準表格。您的EF Linq的會是這個樣子:使用下面的代碼

//context is your DbContext object 
context.Students.Include(s => s.Standards).ToList(); 
+0

我可以包括StudentStandards連接器表,但我沒有得到自動感測如上所述的標準表。看着我的學生實體,這確實有道理,因爲本身沒有標準領域。你能爲我驗證嗎?謝謝 – Reza

+0

謝謝@dotNet。用你的答案和其他網絡帖子的組合來想出它 – Reza

+0

你能解釋一下如何讓這個屬性起作用嗎? – DerDee