實體框架3.5 - 如何加載子項

.net-3.5 entity-framework linq

我的問題可能很簡單,你如何加載子/子類。沒有“負載”或類似的東西,我可以找到上下文加載孩子。

上下文類是ObjectContext類型,見下文:

public partial class RTIPricingEntities : global::System.Data.Objects.ObjectContext

產品

Product.ModifiedByUser(加載產品時如何加載這個類??)

Product.Category(加載產品時如何加載類別?)

熱門答案

你可以急切加載:

var q = from p in Context.Products
                  .Include("ModifiedByUser")
                  .Include("Category")
        select p;

......或項目:

var q = from p in Context.Products
        select new 
        {
           Id = p.Id,
           Name = p.Name
           ModifiedByUserName = p.ModifiedByUser.Name,
           CategoryName = p.Category.Name
        }

投影的優點是您只獲得所需的數據,而不是每個被引用的實體。急切加載的優點是返回的實體確實改變了跟踪。為手頭的問題選擇合適的技術。

更新

是的,重要的要提到您正在使用RIA服務。我認為你也在客戶中工作。這使事情完全不同。

在RIA Services中,確保在初始加載時返回所需實體的整個圖表非常重要。您不希望在實體上調用類似.Load()的內容,因為這對服務器來說是另一個熱點,這對性能不利。例如,如果您位於Silverlight客戶端並從服務器請求實例列表並且它們的相關屬性尚未實現,則已為時已晚。此外,Include將無法在Silverlight客戶端中運行。因此,RIA Services具有服務器端工具,您可以使用它們來確保最初返回正確的,完全物化的對像圖。

您需要做的是在RIA Services服務器中使用IncludeAttribute。您可以使用[Include]創建“夥伴”元數據類來裝飾您的實體模型。 RIA服務概述文檔的第4.8節中有一些示例。



許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因