Odpowiedz

6

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).
+0

Jest to bardzo ciekawe i użyteczne. Mam nadzieję, że więcej osób z SO opowie, zanim trolle zamkną ten wątek. –

+0

Chciałbym także usłyszeć więcej, ponieważ jestem/bardzo/w konflikcie o popełnieniu kodu EF4. – anon

+0

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

0

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:

+0

NHibernate ma również wielu różnych projektantów. Możesz go używać płynnie i automappings bez xml – Sly

+0

Czy możesz umieścić link dla tych projektantów? – JackD

Powiązane problemy