Jarosław
S.
Kierownik Działu
Rozwoju Aplikacji
.NET, ITeam SA
Temat: ASP.NET i Entity Framework - czy taka "para" w ogóle ma...
Ostatnio przyglądam się trochę Entity Framework i mam poważne wątpliwości, czy tą technologię w ogóle można rozważać w kontekście aplikacji ASP.NET.Moje wątpliwości wynikają z faktu, że tworzenie obiektu ObjectContext jest bardzo czasochłonne (nic dziwnego - przetwarzane są metadane opisujące poszczególne modele), a obiekt ten nie nadaje się do cache-owania i współdzielenia. Najbardziej pracochłonne jest tak naprawdę tworzenie EntityConnection, ale ta klasa dziedziczy z DbConnection, co z definicji ją wykreśla jako kandydata do cache-owania i współdzielenia w aplikacji ASP.NET (zwykle potrzebuję osobnej transakcji dla każdego z klientów :-)).
Jest jeszcze coś takiego jak MetadataWorkspace, ale jeszcze nie rozgryzłem do końca, czym to się je.
Ciekawe jest to, że wszystkie "oficjalne" przykłady na MSDN-ie dotyczące aplikacji ASP.NET (np. Human Resources ASP.NET Web Site) korzystają z każdorazowego tworzenia instancji klasy ObjectContext (w tym wypadku o nazwie HRSkillsEntities), czyli rozwiązania bardzo mało wydajnego.
Wykonałem prosty test (wykonanie 100 operacji zapisu do bazy każdorazowo tworząc i zwalniając obiekt klasy ObjectContext) i wyniki były "lekko" niepokojące: analogiczne rozwiązania oparte o TableAdapter lub LinqToSql były kilka razy szybsze. Ja wiem, że zawsze można dołożyć kilka serwerów, ale kilkukrotna różnica w wydajności to moim zdaniem zdecydowanie za dużo.
Podsumowując moje pytanie brzmi:
Jakie są zalecane sposoby tworzenia instancji ObjectContext w aplikacjach ASP.NET / usługach / innych aplikacjach bezstanowych?