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? 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.
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;
}
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.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.
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.
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