Jakie są zalety i wady korzystania z Entity Framework 4.1 Najpierw kod nad Model / Baza danych najpierw ze schematem EDMX?
Staram się w pełni zrozumieć wszystkie podejścia do budowania warstwy dostępu do danych przy użyciu EF 4.1. Używam wzorca repozytorium i IoC
.
Wiem, że mogę zastosować podejście oparte na kodzie: ręcznie definiuj moje byty i kontekst oraz używaj ModelBuilder
do dostrajania schematu.
Mogę również utworzyć EDMX
diagram i wybrać krok generowania kodu, który używa szablonów T4 do generowania tych samych POCO
klas.
W obu przypadkach kończę na POCO
obiekcie ORM
agnostycznym i pochodzącym z kontekstu DbContext
.
Najpierw baza danych wydaje się być najbardziej atrakcyjna, ponieważ mogę zaprojektować bazę danych w Enterprise Manager, szybko zsynchronizować model i dostosować go za pomocą projektanta.
Jaka jest różnica między tymi dwoma podejściami? Czy chodzi tylko o preferencje VS2010 vs Enterprise Manager?
źródło
Odpowiedzi:
Myślę, że różnice są następujące:
Najpierw kod
Najpierw baza danych
Najpierw model
Oczekuję, że w przypadku EF 4.1 istnieje kilka innych funkcji związanych najpierw z Kodem vs. Model / Baza danych. Płynne API użyte w Code najpierw nie oferuje wszystkich funkcji EDMX. Oczekuję, że funkcje takie jak mapowanie procedur przechowywanych, widoki zapytań, definiowanie widoków itp. Będą
DbContext
działać, gdy najpierw użyję Modelu / Bazy danych i (jeszcze tego nie próbowałem), ale najpierw nie działają w Kodzie.źródło
DbContext
które istnieją wObjectContext
użyciu((IObjectContextAdapter)dbcontext).ObjectContext
.Myślę, że to proste „drzewo decyzyjne” Julie Lerman, autorki „Programming Entity Framework” powinno pomóc w podejmowaniu decyzji z większą pewnością:
Więcej informacji tutaj .
źródło
Najpierw baza danych i najpierw model nie ma żadnych rzeczywistych różnic. Wygenerowany kod jest taki sam i można łączyć te podejścia. Na przykład możesz utworzyć bazę danych za pomocą projektanta, niż możesz zmienić bazę danych za pomocą skryptu SQL i zaktualizować swój model.
Przy pierwszym użyciu kodu nie można zmienić modelu bez rekreacyjnej bazy danych i utraty wszystkich danych. IMHO to ograniczenie jest bardzo surowe i nie pozwala na użycie kodu w pierwszej kolejności w produkcji. Na razie nie jest to naprawdę przydatne.
Drugą niewielką wadą kodu jest to, że konstruktor modeli wymaga uprawnień do głównej bazy danych. Nie wpływa to na ciebie, jeśli korzystasz z bazy danych SQL Server Compact lub kontrolujesz serwer bazy danych.
Zaletą kodu jest przede wszystkim bardzo czysty i prosty kod. Masz pełną kontrolę nad tym kodem i możesz go łatwo modyfikować i używać go jako modelu widoku.
Mogę zalecić stosowanie pierwszego podejścia do kodu podczas tworzenia prostej autonomicznej aplikacji bez wersjonowania i używania najpierw modelu \ database w projektach wymagających modyfikacji w produkcji.
źródło
Cytując odpowiednie części z http://www.itworld.com/development/405005/3-reasons-use-code-first-design-entity-framework
źródło
Najpierw kod wydaje się wschodzącą gwiazdą. Rzuciłem okiem na Ruby on Rails, a ich standard to najpierw kod, z migracjami baz danych.
Jeśli budujesz aplikację MVC3, uważam, że Code ma najpierw następujące zalety:
Aktualizacja
Pytanie dotyczy także porównania kodu-pierwszego do modelu EDMX / db-first. Kod-pierwszy może być również użyty w obu tych podejściach:
źródło
Najpierw używam bazy danych EF, aby zapewnić większą elastyczność i kontrolę nad konfiguracją bazy danych.
Najpierw kod EF i model wydawały się na pierwszy rzut oka fajne i zapewniają niezależność bazy danych, jednak w ten sposób nie można określić, co uważam za bardzo podstawowe i typowe informacje o konfiguracji bazy danych. Na przykład indeksy tabel, metadane zabezpieczeń lub klucz podstawowy zawierający więcej niż jedną kolumnę. Uważam, że chcę korzystać z tych i innych typowych funkcji bazy danych, dlatego i tak muszę przeprowadzić konfigurację bazy danych bezpośrednio.
Uważam, że domyślne klasy POCO generowane podczas DB są najpierw bardzo czyste, jednak brakuje im bardzo użytecznych atrybutów adnotacji danych lub mapowań do procedur przechowywanych. Użyłem szablonów T4, aby pokonać niektóre z tych ograniczeń. Szablony T4 są niesamowite, zwłaszcza w połączeniu z własnymi metadanymi i częściowymi klasami.
Najpierw model wydaje się mieć duży potencjał, ale daje mi wiele błędów podczas refaktoryzacji złożonego schematu bazy danych. Nie pewny dlaczego.
źródło
Praca z dużymi modelami była bardzo powolna przed SP1, (nie wypróbowałem go po SP1, ale mówi się, że jest to teraz snap).
Nadal najpierw projektuję swoje tabele, a następnie wbudowane narzędzie generuje dla mnie POCO, więc wykonanie każdego zadania poco wymaga wykonywania powtarzalnych zadań.
kiedy używasz systemów kontroli źródła, możesz łatwo śledzić historię swoich POCO, nie jest to takie proste z kodem generowanym przez projektanta.
Mam bazę dla mojego POCO, co sprawia, że wiele rzeczy jest całkiem łatwych.
Mam widoki dla wszystkich moich tabel, każdy widok podstawowy zawiera podstawowe informacje o moich kluczach obcych, a moje widoki POCO pochodzą z moich klas POCO, co jest znowu całkiem przydatne.
I wreszcie nie lubię projektantów.
źródło
Przykład pierwszego podejścia do bazy danych:
Bez pisania kodu: ASP.NET MVC / MVC3 Baza danych Pierwsze podejście / Baza danych pierwsza
I myślę, że jest to lepsze niż inne podejścia, ponieważ utrata danych jest mniejsza przy tym podejściu.
źródło
IMHO Myślę, że wszystkie modele mają świetne miejsce, ale problem, jaki mam z pierwszym podejściem do modelu, występuje w wielu dużych firmach, w których DBA kontroluje bazy danych. Nie można elastycznie budować aplikacji bez pierwszego podejścia do baz danych. Pracowałem nad wieloma projektami, a jeśli chodzi o wdrożenie, chcieli mieć pełną kontrolę.
O ile zgadzam się ze wszystkimi możliwymi odmianami Kod po pierwsze, model po pierwsze, baza danych po pierwsze, musisz wziąć pod uwagę rzeczywiste środowisko produkcyjne. Więc jeśli twój system będzie dużą aplikacją bazową dla wielu użytkowników, a DBA uruchomi program, możesz rozważyć pierwszą opcję bazy danych tylko moją opinię.
źródło
Myślę, że jedną z zalet kodu jest to, że możesz wykonać kopię zapasową wszystkich zmian dokonanych w systemie kontroli wersji, takim jak Git. Ponieważ wszystkie tabele i relacje są przechowywane w zasadniczo klasach, możesz cofnąć się w czasie i zobaczyć, jaka była wcześniej struktura bazy danych.
źródło