Czy to jest lepsze? Słyszałem rozszerzenie CodeFirst, ale czy jest gotowe na pierwszy dzień. Podziel się swoimi doświadczeniami z rozwojem, wszelkimi kosztami związanymi z wydajnością, itp.W jaki sposób EF4 porównuje się z NHibernate?
Odpowiedz
Myślę, że jest to aktualne pytanie, ponieważ zastanawiałem się dokładnie nad tym samym. Próbuję stworzyć poważny model handlu elektronicznego i staram się zachować moje POCO wolne od obaw o wytrwałość, a także staram się pozostać wiernym Domain Driven Design. Do tej pory jestem bardzo ostrożny i jestem na granicy, czy powinienem przeskoczyć statek do NHibernate. Jedyną rzeczą, która powstrzymuje mnie od tego, jest to, że zakładam, że Microsoft poprawi (i szybko).
Niektóre z największych problemów do tej pory:
- Niezdolność do drobno obiektu kontrola materializacji. EF wywołuje konstruktor zerowego arg na twoim POCO, a to jest zachowanie, którego nie możesz zmienić.
- Brak wsparcia enum. Społeczność krzyczy - krzyczy! - za to i tak się nie stało. Obejścia są straszne i zanieczyszczają twój model domeny.
- Dziwne błędy mapowania podczas próby kontrolowania nazw kolumn i relacji w bazie danych. Głównymi, o których mogę pomyśleć, są klucze złożone i relacje wiele do wielu. Można je obejść i zakładam, że zostaną one naprawione przez czas wydania, ale mimo to są frustrujące.
- Zły SQL. Wykonuję również pracę DBA, a SQL, który EF generuje (z lub bez Code-First) jest okropny.
A to tylko wierzchołek góry lodowej: dopiero zaczynam uczyć się EF4 i wpadam w okropne blokady dróg. Ponieważ myślę o więcej powodów, dodam je tutaj. Nadal się przez to zmagam.
(zastanawiam się, czy społeczność nada mu inny głos z „wotum nieufności”.)
Więcej:
- Aby dodać do problemu „Weird błędy mapowania”: Nie możesz kontrolować nazwę kolumny, jeśli uczestniczy w relacjach samoreferencyjnych (na przykład, jeśli posiadasz hierarchię). Zakładam, że zostanie to naprawione w ostatecznej wersji.
- Brak grupowania, co powoduje wielokrotne odwiedziny do bazy danych. Na przykład, jak usunąć grupę przedmiotów z kolekcji? Załaduj wszystkie elementy do pamięci i usuwaj je pojedynczo. Mniejszy wskaźnik to liczba trafień DB podczas wstawiania do tabel, które uczestniczą w relacji dziedziczenia.
- Brak inteligentnego sposobu radzenia sobie ze zmianami modelu. Kod EF - Najpierw uwielbia całkowicie upuszczać całą bazę danych, jeśli trzeba zmienić schemat.
- Kilka punktów rozszerzalności. Możesz dosłownie liczyć na jedną rękę liczbę zdarzeń, które EF4 pozwala ci zapisać (a Code-First nie zapewnia znacznie więcej).
Jak dla mnie - ja wolę EF ale z pewnymi ulepszeniami.Zasadniczo EF oferuje Państwu następujące korzyści:
- modelu wizualne Editor
- Database/model kreatora Update (zamiast ręcznych zmian XML - co jest straszne dla mnie)
Również jestem stosując 3-rD firm komercyjnych narzędzi opartych na EF i L2S (LinqConnect), które stanowią dla mnie następujące funkcje:
- Geography support
- Optimized SQL generation
- Produkt całkowicie zintegrowane z Visual Studio
- Inteligentny kreator aktualizacji bazy danych (tryb synchronizacji)
Jest to bardzo ciekawe i użyteczne. Mam nadzieję, że więcej osób z SO opowie, zanim trolle zamkną ten wątek. –
Chciałbym także usłyszeć więcej, ponieważ jestem/bardzo/w konflikcie o popełnieniu kodu EF4. – anon
To jest bardzo dobra lista. Wszystkie ważne punkty, których doświadczyłem w ciągu ostatnich kilku miesięcy. Dodałbym również brak EF4 typu "GEOGRAPHY" wsparcie typu danych (SQL Server) i niezdolność do przekazywania typów tabel zdefiniowanych przez użytkownika (również SQL Server) do przechowywanych proc. Aby walczyć z tym pierwszym, musiałem użyć wyzwalaczy, aby zwalczyć to drugie, zdegradowałem się do klasycznego ADO.NET. – RPM1984