2013-02-07 103 views
0

我對包含命令有一個理解和使用問題,主要是在nopCommerce 1.9網站上工作時,但我在任何地方都遇到同樣的問題。我已經搜索了網絡,並在stackoverflow,但似乎無法找到任何其他人有同樣的問題,所以我想這只是我得到這個錯誤。實體框架4 Linq包括不加載集合

我認爲這個問題很簡單,但很簡單:當我在查詢父實體時包含子實體時,EF加載所有實體,但不加載這意味着當我嘗試訪問集合時, EF返回數據庫加載集合。

爲了澄清,考慮以下因素:

var products = (from p in _context.Products.Include("NpProductVariants") select p).ToList(); 

var productvariant = products.ProductVariants[2]; //Loads the NpProductVariants collection 

我認爲,額外的抓取superflous,事實上,如果我創建一個對象使用架,以保持導航收集和代碼,我能避免進一步取,但是這很煩人即

var products = (from p in _context.Products.Include("NpProductVariants") select new productholder() { product = p, variants = p.NpProductVariants }).ToList(); 

這證明,收集查詢執行過程中,因爲我可以儲存它,但它不會自動顯示爲連接到ObjectContext的,直到我嘗試訪問特性,這需要一個前tra查詢。

我認爲問題很清楚,但是我做錯了什麼?

任何幫助將不勝感激。

謝謝。

馬克

+0

:您包含'NpProductVariants',然後使用products.'ProductVariants [2]'。而且你沒有包含任何ProductVariants ...那麼,你想要哪一個? –

回答

0

要包括"NpProductVariants",但你正在訪問ProductVariants

有兩件事情可以做,這取決於你的實際EF型號:

  1. 更改Include"ProductVariants"

    var products = _context.Products.Include("ProductVariants"); 
    
  2. 更改屬性您訪問NpProductVariants

    var productvariant = products.NpProductVariants[2]; 
    
第一個代碼中的
+0

不太清楚。在代碼的第一部分是ProductVariants,第二部分是NpProductVariants ...或者它們是兩個導航屬性!如果NpProductVariants不存在,則會導致該錯誤,這似乎不成問題。 –

+0

@RaphaëlAlthaus:事實上,這引起了我的注意。儘管我想保留我的回答,因爲它不能解決問題。來自OP的反饋會很好。 –

+0

我當然沒有要求你刪除它,沒有你的答案不會注意到這個... –