2009-06-13 59 views
1

我有實體類型Order,它具有對實體類型Customer的引用。 有一個函數導入根據條件返回Order的列表。此訂單列表中顯示的數據網格顯示爲如何在不使用EntityReference.Load()的情況下手動加載EntityReference()

Order.Date | Order.Customer.Name | Order.Total

For Customer.Name to show up我需要在列表中的每個訂單中加載CustomerReference,但每次調用Order.CustomerReference.Load()都會往返SQL Server並使整個過程非常低效。問題是,如果我有一個查詢爲列表中的所有訂單檢索所有客戶數據,那麼如何在每個訂單中手動填充CustomerReference?

基本上我需要做。包括(「客戶」)與一個函數導入。

感謝

回答

2

如果執行帶回所有相關客戶一次性查詢,也無需手動填充每個CustomerReference。這是因爲所謂的關係修復會自動爲你做這件事。

也就是說,如果你這樣做:

Order o = ctx.Orders.First(o => o.Customer.ID == 1); 
// at this point o.Customer == null 

Customer c = ctx.Customers.First(c => c.ID == 1); 
// at this point o.Customer == c 

關係Fixup時意味着客戶進入環境中的所有相關對象將自動爲指向它...

即後這比你想象的要容易得多!

希望這有助於

亞歷

-1

感謝亞歷克斯,我試過了。它按照你所說的工作,但顯然它不適用於派生實體類型。訂單實體類型是一個具有派生類銷售的抽象基類。

Order o1 = ctx.Orders.First(o => o.Customer.ID == 1); 
Sale s1 = ctx.GetSaleByCustomerID_FunctionImport(2).First(); 

Customer c = ctx.Customers.First(c => c.ID == 1); 
Customer c2 = ctx.Customers.First(c => c.ID == 2); 
//At this point o.Customer == c but s1.Customer is still null 

而且我不能將函數導入返回類型設置爲Order,因爲它是抽象的,不允許作爲返回類型。

我在這裏錯過了什麼?

更新: 我發現有01之間的差異和S1客戶加載 之前o1.CustomerReference.IsLoaded是假 o1.CustomerReference.EntityKey是ID = 2

s1.CustomerReference.IsLoaded是假 s1.CustomerReference.EntityKey爲空

但調用s1.CustomerReference.Load()將正確加載客戶數據。 我重複檢查了我的GetSaleByCustomerID函數導入(簡單地說「SELECT * FROM Customers WHERE ID = 2」),它確實返回了引用所需的CustomerID字段。

相關問題