2011-09-12 48 views
0

是什麼差之間2代碼段

ObjectQuery<SalesOrderHeader> query = 
context.Contacts.Include("SalesOrderHeaders").Include("SalesOrderDetails"); 

Contact contact = 
context.Contacts.Include("SalesOrderHeaders.SalesOrderDetails").FirstOrDefault(); 

使用一個在另一個上的任何優勢之間的差異? 我的主要困惑是在第一個中使用2 Include,在第二個中使用2個表Include。 在此先感謝。

+0

您的第一個查詢不正確。當您查詢「聯繫人」時,如何獲得'SalesOrderHeader'作爲返回類型。您的'Contact'類除了'SalesOrderHeaders'之外還有'SalesOrderDetails'屬性嗎? – Eranga

+0

感謝您的評論。我主要關心的是語法。我試圖弄清楚。請假設表格是相關的。表名僅用於說明目的。 –

回答

1

在實體框架中,您有一些稱爲導航屬性的東西(以您的.edmx模型命名),因此您可以基於它們訪問相關實體,換句話說,您可以使用導航屬性快速加載(包含)相關數據。 。

我猜你有這樣的關係:一個聯繫人可以有很多SalesOrderHeaders和一個SalesOrderHeader的可以有很多SalesOrderDetails,所以如果你開始從聯繫人實體加載,並希望有兩個關係加載的你應該做的:

Contact contact = context.Contacts.Include("SalesOrderHeaders").Include("SalesOrderHeaders.SalesOrderDetails").FirstOrDefault(); 

正如您所看到的,我們正在使用第一個包含將SalesOrde來自DB的數據庫頭部以及通過SalesOrderHeaders導航屬性導入SalesOrderDetails的secound one(從我們開始)聯繫人

+0

Thx回答。很好的解釋。兩件事1.在我的問題中,兩種代碼都會得到相同的結果? 2.是否將tb1.tb2語法用於從一個表格導航到另一個表格? –

+0

1.不,2包含2個不同的導航名稱會給你帶來比1更多的數據,所以在你的例子中(如果你的導航名稱很好,而且你有表格數據),你將在第一個數據上有更多的數據。在您的第一個代碼中,您應該在聯繫人> SalesOrderHeaders和聯繫人> SalesOrderDetails之間建立直接關係,否則您將獲得無效的導航屬性錯誤。 2.用於從一個「表」到另一個「導航」的導航。我用引號標記了表格,因爲它不一定是表格名稱,我們正在討論導航屬性名稱,如果您在模型上更改它,它可能會有所不同 – Milox