Database
 sql >> Baza danych >  >> RDS >> Database

Jak pracować z dziedziczeniem w Entity Framework Core

Entity Framework Core firmy Microsoft to wieloplatformowa, lekka i elastyczna wersja swojego poprzednika, Entity Framework. EF Core to narzędzie do mapowania obiektowo-relacyjnego (ORM), które oferuje ustandaryzowany sposób przechowywania i pobierania danych do iz różnych źródeł danych.

Programując w oparciu o model koncepcyjny, a nie relacyjny. W rezultacie nie ma niezgodności impedancji między tym, jak dane są reprezentowane w aplikacji, a tym, jak są przechowywane w bazie danych.

Dziedziczenie jest cechą programowania obiektowego, która umożliwia tworzenie podklas z klasy bazowej, rozszerzając w ten sposób cechy klasy bazowej. Entity Framework Core zapewnia doskonałą obsługę dziedziczenia. W tym artykule omówiono sposób, w jaki możemy zaimplementować dziedziczenie w Entity Framework Core. Skorzystamy z EntityDeveloper, aby porozmawiać z bazą danych.

Wymagania wstępne

Aby móc pracować z przykładami kodu przedstawionymi w tym artykule, należy zainstalować w systemie następujące elementy:

  • Visual Studio 2019 Community Edition (pobierz)
  • dotConnect dla PostgreSQL (pobierz)
  • Programista jednostek

Możesz pobrać kopię Entity Developer (wersja próbna) stąd:https://www.devart.com/entitydeveloper/download.html.

Utwórz bazę danych

Teraz, gdy projekt ASP.NET Core Web API został utworzony w programie Visual Studio 2019; kolejnym krokiem jest stworzenie bazy danych. Zwróć uwagę, że dla uproszczenia użyjemy w tym przykładzie bazy danych z kilkoma dwiema tabelami o prostych projektach. Utwórz bazę danych o nazwie Demo i utwórz w niej trzy tabele (osoba, użytkownik i menedżer). Pola w tych tabelach powinny być mapowane z właściwościami klas modeli przedstawionych w dalszej części tego artykułu.

Utwórz nowy projekt ASP.NET Core Web API

Zakładając, że na komputerze zainstalowano niezbędne oprogramowanie, aby móc pracować z Entity Developer, wykonaj czynności opisane poniżej, aby utworzyć nowy projekt ASP.NET Core Web API.

1. Najpierw otwórz środowisko IDE programu Visual Studio 2019.
2. Następnie kliknij Utwórz nowy projekt po załadowaniu IDE.
3. Kliknij Utwórz nowy projekt .
4. Następnie wybierz Aplikacja internetowa ASP.NET Core .
5. Kliknij Dalej .
6. Określ nazwę i lokalizację projektu – gdzie ma być przechowywany w Twoim systemie.
7. Opcjonalnie kliknij Umieść rozwiązanie i projekt w tym samym katalogu pole wyboru.
8. Następnie kliknij Utwórz .
9. W Utwórz nową aplikację internetową ASP.NET Core w następnym oknie dialogowym wybierz API jako szablon projektu.
10. Wybierz wersję ASP.NET Core 3.1 lub nowszą.
11. Powinieneś wyłączyć Konfiguruj dla HTTPS i Włącz obsługę platformy Docker opcje, wyłączając odpowiednie pola wyboru.
12. Ponieważ w tym przykładzie nie będziemy używać uwierzytelniania, określ uwierzytelnianie jako Brak uwierzytelniania .
13. Na koniec kliknij Utwórz przycisk, aby zakończyć proces.

Utwórz model danych encji

Następną rzeczą, którą powinieneś zrobić, jest utworzenie modelu danych encji. Podczas tworzenia modelu w programie Entity Developer dostępne są dwie opcje:Najpierw baza danych (opcja jest zaznaczona domyślnie) i Najpierw model. W tym przykładzie wykorzystamy podejście Database First. Pamiętaj, aby wybrać Generuj z bazy danych możliwość wygenerowania modelu z bazy danych i wybrania obiektów bazy danych, które chciałbyś, aby były częścią modelu danych encji.

Postępuj zgodnie z poniższymi krokami, aby utworzyć model danych encji w Entity Developer przy użyciu podejścia najpierw bazy danych.

1. Wybierz swój projekt w Eksploratorze rozwiązań Okno.
2. Kliknij prawym przyciskiem myszy i wybierz Dodaj>Nowy element .
3. Wybierz Devart EF Core Model jako szablon, jak pokazano poniżej.

4. Podaj nazwę modelu danych jednostki i kliknij Dodaj .
5. Określ właściwości połączenia i przetestuj połączenie.
6. Kliknij Dalej kontynuować.
7. Domyślnie wybrana zostanie opcja „Generuj z bazy danych”. Ponieważ chcemy, aby model został utworzony z bazy danych, kliknij Dalej kontynuować.
8. Odznacz wszystkie opcje, a następnie określ tylko te obiekty bazy danych, które chciałbyś, aby były częścią modelu. Tutaj należy wybrać tabele Produkty i Kategorie.
9. W Konfiguracji zasady nazewnictwa ekranie, możesz opcjonalnie określić reguły nazewnictwa dla swoich encji.
10. Na następnym ekranie możesz opcjonalnie określić właściwości modelu.
11. Na kolejnym ekranie możesz opcjonalnie wybrać zawartość diagramu modelu.
12. Na kolejnym ekranie możesz opcjonalnie określić szablony generowania kodu.
13. Określ wybrany szablon generowania kodu.
14. Na koniec kliknij Zakończ aby zakończyć proces.

Twój Entity Data Model ADO.NET przy użyciu Entity Developer zostanie utworzony wraz z kontekstem danych i klasami modelu.

Dziedziczenie w Entity Framework Core

Entity Framework Core (EF Core) umożliwia mapowanie hierarchii klas .NET do bazy danych. W związku z tym można utworzyć jednostki platformy .NET reprezentowane jako typy podstawowe i pochodne, a EF Core może wygenerować dla Ciebie schemat bazy danych. Jednak ponieważ EF Core nie wyszukuje automatycznie klas podstawowych ani pochodnych, należy jawnie zadeklarować typ CLR w modelu, jeśli chcesz, aby był mapowany. Należy zauważyć, że określenie tylko typu podstawowego nie wystarczy, tj. nie wymusi automatycznie w EF Core uwzględnienia wszystkich podtypów.

Poniższa lista kodu ilustruje, w jaki sposób można utworzyć niestandardowy kontekst danych dla klasy oraz jej podklasy.

public class DemoDbContext : DbContext {
    public DbSet<Person> Person { get; set; }
    public DbSet<Author> Authors { get; set; }
}

public class Person {
    public int PersonId { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
}

public class Author : Person {
    public string SubjectArea { get; set; }
}

Tabela na hierarchię (TPH)

W typie dziedziczenia Table Per Hierarchy (TPH) (jest to domyślny typ dziedziczenia w EF Core) będzie mieć tylko jedną tabelę dla całej hierarchii do reprezentowania wszystkich klas. Aby odróżnić różne typy, używana jest kolumna „dyskryminator”. Domyślnie nazwa tabeli odpowiada klasie bazowej lub połączonemu z nią polu DbSet. Nazwa tabeli będzie domyślnie nazwą klasy bazowej lub odpowiadającego jej atrybutu DbSet.

Poniższy fragment kodu ilustruje sposób reprezentowania tabeli na hierarchię:

public abstract class Person {
        public int Id { get; set; }
        public string FirstName { get; set; }
        public string LastName { get; set; }
    }

    public class User : Person {
        public string UserName { get; set; }
        public string Password { get; set; }
    }

    public class Manager : Person {
        public string Department { get; set; }
    }

Tabela według typu (TPT)

Relacje dziedziczenia typu tabela na typ (TPT) są przedstawiane jako klucze obce. W tym podejściu oddzielna tabela reprezentuje każdy typ (w tym typy abstrakcyjne) łańcucha dziedziczenia. Klucze obce służą do łączenia tabel reprezentujących typy typu pochodnego z ich typem podstawowym. W tej strategii EF Core tworzy tabelę podstawową w bazie danych i wiele tabel specyficznych dla każdego typu pochodnego.

Poniższa lista kodów pokazuje, jak można zaimplementować podejście Table Per Type (TPT):

public abstract class Person {
    public int Id { get; set; }
    public string FullName { get; set; }
}

[Table("Users")]
public class User : Person {
     public string UserName { get; set; }
     public string Password { get; set; }
}

[Table("Managers")]
public class Manager : Person {
     public string Department { get; set; }
}

Tabela według typu betonu (TPC)

W podejściu TPC (Table Per Concrete Type) każdy konkretny typ w łańcuchu dziedziczenia jest reprezentowany przez oddzielną tabelę w bazie danych, ale nie przez klasę abstrakcyjną. Właściwości dowolnego abstrakcyjnego typu bazowego są tworzone jako pola w tabeli każdego typu betonu.

Projekt klasy będzie taki sam jak TPH. Oto jak możesz określić tabelę dla każdej z podklas:

public class MyDbContext : DbContext {
    public DbSet<Person> Person { get; set; }

    protected override void OnModelCreating(DbModelBuilder modelBuilder) {
        modelBuilder.Entity<User>().Map(m => {
            m.MapInheritedProperties();
            m.ToTable("Users");
        });

        modelBuilder.Entity<Author>().Map(m => {
            m.MapInheritedProperties();
            m.ToTable("Managers");
        });
    }
}

Podsumowanie

Entity Framework Core można wykonać na dowolnej platformie obsługującej .NET Standard 2.1. Obejmuje to platformę .NET Core 3.1 i .NET 5. Jednak nie będzie ona wykonywana w programie .NET Standard 2.0, co oznacza, że ​​począwszy od EF Core 5.0, nie będzie można korzystać z EF Core z .NET Framework. Miłego czytania!


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Klastry obserwatorów — 3 główne przypadki użycia do synchronizacji wdrożeń SQL i NoSQL

  2. Wskazówki dotyczące Wszechświata

  3. Podstawy wyrażeń tabelowych, Część 9 – Widoki w porównaniu z tabelami pochodnymi i CTE

  4. Praca z danymi JDBC spoza ASCII w Talend

  5. Łączenie się z bazą danych za pomocą PHP