Zapoznaj się z różnymi podejściami do modelowania jednostek w Entity Framework

Entity Framework upraszcza dostęp do danych w aplikacji, umożliwiając pisanie kodu w celu wykonywania operacji CRUD (tworzenie, odczytywanie, aktualizowanie i usuwanie) bez konieczności bezpośredniej interakcji z podstawowym dostawcą bazy danych. Istnieją trzy podejścia do modelowania jednostek w Entity Framework: Code First, Model First i Database First. W tym artykule omówiono wszystkie te trzy podejścia oraz ich wady i zalety.

Co to jest Entity Framework? Po co cały ten szum?

Entity Framework firmy Microsoft to rozszerzony ORM, który pomaga odizolować model obiektowy aplikacji od modelu danych. Jest to framework ORM typu open source dla ADO.Net i jest częścią .Net Framework. Korzystając z narzędzi ORM, możesz skupić się na logice biznesowej aplikacji i przechowywać dane w bazie danych przy znacznie mniejszej ilości kodu. Możesz skorzystać z ORM do konwersji danych między niekompatybilnymi systemami typów - możesz przechowywać obiekty domeny w bazowej bazie danych bez martwienia się o wewnętrzne zawiłości dotyczące sposobu przechowywania danych. Entity Framework jest dojrzałym ORM firmy Microsoft i może być używany z wieloma różnymi bazami danych.

W kolejnych sekcjach omówimy każde z trzech podejść do modelowania jednostek przy użyciu Entity Framework.

Code First

Podejście Code First ułatwia tworzenie jednostek w aplikacji, koncentrując się na wymaganiach domeny. Zasadniczo możesz śledzić projektowanie oparte na domenie (DDD), korzystając z tego podejścia. Po zdefiniowaniu jednostek i określeniu konfiguracji możesz utworzyć bazę danych w locie, korzystając z obu. Podejście Code First zapewnia większą kontrolę nad kodem - nie musisz już pracować z kodem generowanym automatycznie. Podoba mi się to podejście, ponieważ zapewnia dużą elastyczność i kontrolę. Jeśli masz gotowe klasy domeny, zawsze wolałbym to podejście, ponieważ możesz łatwo utworzyć bazę danych na podstawie klas domeny.

Wadą tego podejścia jest utrata wszelkich zmian w schemacie bazowej bazy danych; w tym podejściu twój kod definiuje i tworzy bazę danych. Podejście Code First umożliwia używanie Entity Framework i definiowanie modelu jednostki bez projektanta lub plików XML. Możesz użyć podejścia POCO (Plain Old CLR Objects) do zdefiniowania modelu i wygenerowania bazy danych.

W tym podejściu zazwyczaj tworzy się klasy encji. Oto przykład; poniżej podano typową klasę jednostek.

 public class Product

   {

      public int ProductId { get; set; }

      public string ProductName { get; set; }

      public float Price { get; set; }

   }

Następnie należy zdefiniować niestandardowy kontekst danych, rozszerzając klasę DbContext, jak pokazano poniżej.

public class Context : DbContext

   {

      public DbSet Products { get; set; }

   }

Na koniec należy określić parametry połączenia w pliku konfiguracyjnym. Gotowe!

Baza danych First

Możesz użyć podejścia Database First, jeśli baza danych jest już zaprojektowana i gotowa. W tym podejściu Entity Data Model (EDM) jest tworzony z podstawowej bazy danych. Na przykład używasz pierwszej metody bazy danych podczas generowania plików edmx w środowisku IDE programu Visual Studio z bazy danych. Ręczne zmiany w bazie danych są łatwe i zawsze można zaktualizować EDM, jeśli zajdzie taka potrzeba (na przykład, jeśli zmieni się schemat podstawowej bazy danych). Aby to zrobić, po prostu zaktualizuj EDM z bazy danych w środowisku IDE programu Visual Studio.

Model First

W podejściu Model First możesz najpierw utworzyć EDM, a następnie wygenerować z niego bazę danych. Zwykle tworzysz pusty EDM za pomocą kreatora Entity Data Model w programie Visual Studio, definiujesz jednostki i ich relacje w programie Visual Studio, a następnie generujesz bazę danych na podstawie tego zdefiniowanego modelu. Możesz łatwo tworzyć jednostki i definiować ich relacje i skojarzenia w projektancie w programie Visual Studio. Możesz również określić właściwość Key i typy danych dla właściwości dla jednostek przy użyciu projektanta. Możesz użyć klas częściowych, aby zaimplementować dodatkowe funkcje w jednostkach.

OK, ale kiedy należy zastosować podejście Model First? Cóż, jeśli ani klasy domeny, ani baza danych nie są gotowe, a wolisz zdefiniować model danych za pomocą wizualnego projektanta, to podejście jest dla Ciebie. Jednak podobnie jak w podejściu Code First, w podejściu Model First ręczne zmiany w bazie danych zostaną utracone, ponieważ model definiuje bazę danych.