2009-04-07 2 views
2

Ich bin ein wenig verwirrt mit einer Aussage, die ich gerade ausprobiere. Ich arbeite mit LINQ zu EntitiesLINQ kann nach Assoziation filtern, gibt aber 0 Ergebnisse zurück, wenn direkt referenziert wird

Ich habe in den folgenden Code kommentiert. Es ist die letzte Console.WriteLine, die ich nicht verstehe. Ich schätze anyones Eingang auf diesem

 using(Ecommerce.Data.Entities.EcommerceEntities ents = new Ecommerce.Data.Entities.EcommerceEntities()) 
     { 
      //This returns 1 item as expected 
      var items = from a in ents.Product 
         where a.ProductVarianceOption.Count() > 0 
         select a; 


      foreach (var item in items) 
      { 
       //This outputs AT07 as expected 
       Console.WriteLine(item.ProductCode); 

       //This outputs 0 , but because I was able to query 
       //only those which had a count greater than 0 above 
       //I do not know why this is returning 0 
       Console.WriteLine(item.ProductVarianceOption.Count()); 
      } 

     } 

TIA

Andrew

UPDATE: nur für den Fall jemand anderes in dieser läuft, und dank Marc GRA, hier ist die Lösung. Marc Gravells Kommentar drängte mich, die IsLoaded-Eigenschaft und auch die Load-Methode zu finden. Danke:

 using(Ecommerce.Data.Entities.EcommerceEntities ents = new Ecommerce.Data.Entities.EcommerceEntities()) 
     { 
      //This returns 1 item as expected 
      var items = from a in ents.Product 
         where a.ProductVarianceOption.Count() > 0 
         select a; 


      foreach (var item in items) 
      { 
       //This outputs AT07 as expected 
       Console.WriteLine(item.ProductCode); 

       //This outputs 0 , but because I was able to query 
       //only those which had a value greater than 0 above 
       //I do not know why this is returning 0 
       Console.WriteLine(item.ProductVarianceOption.Count()); 

       //Load in the data required 
       item.ProductVariance.Load(); 

       //Load in the data required 
       item.ProductVarianceOption.Load(); 

       //This now outputs 2. ... As Expected. Thanks to Marc Gravell. :-) 
       Console.WriteLine(item.ProductVarianceOption.Count()); 
      } 

     } 

Antwort

2

Mit Entity Framework, wenn Sie das Objekt materialisiert haben, dann müssen Sie explizit Sammlung Verbände laden, bevor Sie den Inhalt sehen kann. Ein Schmerz.

0

Sie möchten vielleicht einen Blick auf Transparent Lazy Loading for Entity Framework werfen. Dies ersetzt den ursprünglichen Codegenerator durch einen neuen. Der neue erstellt Entitäten, die das Laden unter der Haube handhaben. Beachten Sie, dass der Code nicht perfekt ist - es gibt einige Probleme. Der größte - soweit es mich betrifft - ist ein Problem mit der Datenbindung, aber Sie können leicht eine Korrektur hinzufügen, weil Sie die Quellen erhalten.