2008-11-11 15 views
6

Myślę, że byłoby mądrze ustawić kontekst obiektu Entity w Application_BeginRequest, zapisać go w Request.items, użyć go w całym żądaniu i zutylizować w Application_EndRequest. W ten sposób kontekst jest zawsze dostępny i mogę poruszać się po wykresie obiektu Entity Framework w moich widokach, leniwie ładując to, czego jeszcze nie byłem chętny.ASP.NET MVC z Entity Framework

Myślę, że byłoby to jak rozwój na Ruby on Rails.

Być może powinienem być strzał do mówienia taką herezję, ale to jest tak szalony, że po prostu może pracować :)

nie mogę Application_BeginRequest i ..EndRequest ognia na ASP.NET MVC chociaż. Czy oni nie zostali zwolnieni? Jakieś specjalne sztuczki, które muszę zrobić?

Odpowiedz

5

1.0 build ASP.NET MVC pozwól mi podłączyć obsługi zdarzeń zarówno beginrequest i endrequest, newing górę SessionScope i przechowywanie go w HttpContext.Items w beginrequest (przeszedłem do Zamek ActiveRecord) iw endrequest I wybierz sesję z HttpContext.Items i wyrzuć ją. Umożliwia to leniwe ładowanie w całym cyklu życia żądania. (może nawet nawigować po wykresie obiektów w widokach.)

5

Kontekst obiektu w EF, taki jak kontekst danych w L2S, jest zaprojektowany jako "jednostka pracy", nie jest bezpieczny dla wątków i nie jest przeznaczony do długiego użytkowania.

W MVC najlepszą strategią jest utworzenie jednej w konstruktorze kontrolera (domyślnie lub jawnie, nie ma znaczenia), a następnie pozbycie się go w metodzie Dispose. Oczywiście EF nie zajmuje się leniwym ładowaniem, więc musisz znaleźć swój własny sposób bycia leniwym. :)

+3

Nie, to złe podejście. To sprawia, że ​​kontroler jest trudny do testowania, a także oznacza, że ​​jednostka pracy nie jest dostępna poza kontrolerem. Wzorzec Session-per-request wymieniony poniżej jest lepszy. EF v1 obsługuje leniwe ładowanie - po prostu musi być wyraźne. –

+0

Myślę, że źle rozumiesz, co oznacza "leniwe ładowanie". EF pozwala automatycznie ładować relacje, ale nie leniwie. Co do testowalności, zgadzam się, że bezpośrednie zużycie kontekstu obiektu szkodzi testowalności, ale to nie ma nic wspólnego z użyciem ctor/dispose. –

+0

LOL dude. To musi być "wyraźne" http://blogs.msdn.com/jkowalski/archive/2008/05/12/transparent-lazy-loading-for-entity-framework-part-1.aspx –

Powiązane problemy