2017-05-30 127 views
1

我目前使用EF數據庫第一種方法創建MVC/AngularJS應用程序。在實現我的數據庫之後,我意識到我不能使用Database-First方法引用多對多關係。LINQ多對多選擇

一個例子可能是Table1通過稱爲Table3的第三個表具有與Table2的多對多關係。 Table3包含兩個主鍵:Table1的PK和Table2的PK。更新我的EDMX模型,我仍然不能添加這個表格,這是合理的,因爲它只是一個多對多的關係,並且應該在Table1類模型和Table2類上設置此屬性。

問題
使用AngularJS爲我的前端,我需要我從數據庫中檢索的數據轉換,而進入的HttpResponse(IHttpActionResult)。我以前遇到過這樣的問題(使用代碼優先),並簡單地禁用延遲加載(從我的EMDX模型類中的屬性中刪除了virtual關鍵字)。

禁用延遲加載後,我似乎無法包含關係。下面是我的意思的例子:

from t1 in _context.Table1.Include(x => x.Table2) 

Table2引用根本不包括在內,因此Icollection<Table2>只是空。

這是否即使有什麼從我的財產與我removingthe virtual關鍵字,或者是這個東西是了問題兩者的映射?

+0

您需要加入表格。看到msdn:https://code.msdn.microsoft.com/101-LINQ-Samples-3fb9811b – jdweng

+0

但我不能。我有三個表格,其中2個包含在我的模型中,但最後一個表格不是,它包含關係,因爲它是多對多的關係。我很確定我不能像這樣加入,除非你能向我展示一個例子嗎? – Detilium

+0

請在請在SO發佈問題之前做一些研究。有很多例子做很多很多,他們幾個是 - 1)http://www.entityframeworktutorial.net/code-first/configure-many-to-many-relationship-in-code-first.aspx 2)https://stackoverflow.com/questions/19342908/how-to-create-a-many-to-many-mapping-in-entity-framework 3)https://stackoverflow.com/questions/5434125/實體框架 - codefirst一對多一對多的關係,與附加信息前 –

回答

0

由於您的表3只包含Ids並且沒有額外信息,因此EF不會爲聯接表生成實體。這是正確的行爲,這就是你應該期待的。

查看此答案以獲取更多信息。 Entity Framework Database First many-to-many

+0

我知道,EF不創建中間表,但我不明白爲什麼我不能包括第二張桌子。這個答案並沒有真正回答我的問題,只是解釋了爲什麼中間表沒有在我的EDMX模型 – Detilium

0

解決

我有幾分像這樣的查詢:

from t1 in _context.Table1 
select new SomeModel() 
{ 
    Table1 = t1, 
    Table2 = t1.Table2 
} 

對我來說實際上包括t1Table2財產,我可以簡單地做一個新的select語句,像這樣:

from t1 in _context.Table1 
select new SomeModel() 
{ 
    Table1 = t1, 
    Table2 = from t2 in t1.Table2 select t2 
} 

我不確定這是否最好p ractice,但至少它按我的預期工作。提出更好的解決方案是值得歡迎的。

+1

哪裏是第三臺存在嗎? – jdweng

+0

這由EF自動映射,第三個表格不在EDMX模型中。這實際上適用於所有關係,即使它是多對多關係或多對一的簡單關係 – Detilium

0

我發現的最簡單的解決方案是僅僅在連接表中添加一個虛擬的第三列。因此,EF會認爲它本身很重要,並將其作爲一個明確的實體。