2012-08-22 18 views
8

Używam EF 5 z Code First. Mam klasę, która zawsze chce załadować niektóre właściwości. Usunąłem wirtualny słowa kluczowego, ale to nie jest chętny ładowania:Kod EF Najpierw wymuszony ładowanie

public class Person 
{ 
    public ICollection<Email> Emails { get; set; } 
    public Profile Profile {get;set;} 
} 

więc przez wyłączenie leniwy załadunku, nie będzie automatycznie prawo chętny obciążenie? Jeśli tak, jak mogę to zarchiwizować bez użycia funkcji Include()?

Dzięki!

Odpowiedz

18

Nie, wyłączenie leniwego ładowania przez usunięcie słowa kluczowego virtual nie włącza automatycznego ładowania. Trzeba Include powiązanego Entity lub Collection jak tak:

var personWithProfile = ctx.People.Include(x => x.Profile).First(); 
var personWithProfileAndEmails = ctx.People. 
              .Include(x => x.Profile) 
              .Include(x => x.Emails) 
              .First(); 

To wielki odczytu z bloga zespołu ADO.NET: http://blogs.msdn.com/b/adonet/archive/2011/01/31/using-dbcontext-in-ef-feature-ctp5-part-6-loading-related-entities.aspx

+0

Dzięki za link i to bardzo użyteczne. Jestem świadomy polecenia Include. Ale czy nie ma sposobu, aby wymusić ładowanie w definicji klasy POCO (lub pliku odwzorowania)? – Calvin

+1

Nie, chcesz wyraźnie powiedzieć EF, kiedy chcesz załadować dane. Jeśli nie, a EF po prostu zawiera wszystkie powiązane podmioty, wystąpią poważne problemy z wydajnością. Zasadniczo każda instrukcja include tłumaczy się na "wewnętrzne" połączenie SQL, a zapytanie wybiera również każdą kolumnę w połączonej tabeli. – Paul

+0

Dzięki za wyjaśnienie! – Calvin

Powiązane problemy