Domyślnie wyłącz leniwe ładowanie w ramach encji 4

Wygląda na to, że leniwe ładowanie jest domyślnie włączone w EF4. Przynajmniej w moim projekcie widzę, że wartość

dataContext.ContextOptions.LazyLoadingEnabled

Jest domyślnie true. Nie chcę leniwego ładowania i nie chcę pisać:

dataContext.ContextOptions.LazyLoadingEnabled = false;
Za każdym razem dostaję nowy kontekst. Czy jest sposób, aby wyłączyć go domyślnie, powiedzmy, w całym projekcie?
Author: Craig Stuntz, 2010-06-03

5 answers

Następująca odpowiedź odnosi się do przepływu pracy Database-First lub Model-First (jedyne dwa przepływy pracy, które były dostępne z Entity Framework (Wersja Code-First workflow (który jest dostępny od wersji EF >= 4.1), przejdź do odpowiedzi ssmith na to pytanie, aby uzyskać poprawne rozwiązanie.


Plik edmx ma w definicji <ConceptualModel> i <EntityContainer> atrybut leniwego ładowania, gdzie można ustawić lazy loading ogólnie na false:

<EntityContainer Name="MyEntitiesContext" annotation:LazyLoadingEnabled="false">

Tworzy to następujące ustawienie w konstruktorze ObjectContext:

public MyEntitiesContext() : base("name=MyEntitiesContext", "MyEntitiesContext")
{
    this.ContextOptions.LazyLoadingEnabled = false;
    OnContextCreated();
}

Mój przykład nie ma na celu, aby wygenerowany ObjectContext (lub DbContext w nowszych wersjach EF) był edytowany ręcznie (co byłoby nadpisywane przy każdej aktualizacji modelu z bazy danych, jak zauważył ctorx), ale aby element EntityContainer w sekcji edmx:ConceptualModels pliku EDMX był edytowany przez dodanie atrybutu annotation:LazyLoadingEnabled="false" - albo ręcznie w XML edytorze lub na stronie właściwości powierzchni projektanta, gdzie ta opcja jest również dostępna. Ta modyfikacja pliku EDMX automatycznie wygeneruje klasę kontekstową z wyłączoną opcją leniwego ładowania w konstruktorze, jak pokazano powyżej. Sama modyfikacja pliku EDMX nie zostaje nadpisana, gdy model jest aktualizowany z bazy danych.

 64
Author: Slauma,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:34:28

Napisałem szybką próbkę pokazującą Jak nowe funkcje Lazy Loading działają najpierw z kodem EF . Osiągnięcie tego, czego chcesz w pierwszym modelu kodu, jest po prostu kwestią dodania jednej linii do konstruktora DbContext, w następujący sposób:

public BlogContext()
{
    this.Configuration.LazyLoadingEnabled = false;
}
 59
Author: ssmith,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-12-04 19:50:36

Jeśli możesz najpierw użyć kodu EF4, tak? Tak więc, podczas inicjalizacji twojego kontekstu, istnieje nadpisanie 'OnModelCreated'.

W tej metodzie po prostu wywołałem i ustawiłem właściwość i wszystko zostało rozwiązane.

protected override void OnModelCreating(DbModelBuilder modelBuilder) {
     base.Configuration.LazyLoadingEnabled = false;
}
Mój model jest teraz bardziej smakowity. Leniwe ładowanie jest świetne...ale nie, kiedy tego nie chcesz. A kiedy zaczynasz mieć okrągłe odniesienia, to jest po prostu śmieszne.
 24
Author: beauXjames,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-08-29 20:10:46

Możesz to zrobić również od projektanta. Po prostu otwórz .plik edmx, kliknij prawym przyciskiem myszy w dowolnym miejscu modelu i wybierz Właściwości. Następnie Ustaw LazyLoadingEnabled Na false. Tutaj wpisz opis obrazka

 21
Author: AminSaghi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-08 04:01:00

Jeśli modelujesz kod-najpierw, po prostu usuń słowo kluczowe virtual z właściwości reference / object. Posiadanie Wirtualnego odniesienia umożliwi LazyLoading na tym konkretnym odwołaniu.

 4
Author: Todd,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-07-07 14:40:51