Udostępnij za pośrednictwem


Projektant dziedziczenie TPT

W tym przewodniku krok po kroku pokazano, jak zaimplementować dziedziczenie tabeli na typ (TPT) w modelu przy użyciu Projektant Entity Framework (EF Projektant). Dziedziczenie tabeli na typ używa oddzielnej tabeli w bazie danych do obsługi danych dla nie dziedziczone właściwości i właściwości klucza dla każdego typu w hierarchii dziedziczenia.

W tym przewodniku zamapujemy jednostki Kurs (typ podstawowy), OnlineCourse (pochodzące z kursu) i OnsiteCourse (pochodzące z kursu) na tabele o tych samych nazwach. Utworzymy model z bazy danych, a następnie zmienimy model w celu zaimplementowania dziedziczenia TPT.

Możesz również zacząć od modelu Najpierw, a następnie wygenerować bazę danych na podstawie modelu. Program EF Projektant domyślnie używa strategii TPT i dlatego każde dziedziczenie w modelu zostanie zamapowane na oddzielne tabele.

Inne opcje dziedziczenia

Tabela na hierarchię (TPH) to inny typ dziedziczenia, w którym jedna tabela bazy danych jest używana do obsługi danych dla wszystkich typów jednostek w hierarchii dziedziczenia.  Aby uzyskać informacje na temat mapowania dziedziczenia tabeli na hierarchię za pomocą Projektant jednostki, zobacz EF Projektant dziedziczenie TPH. 

Należy pamiętać, że dziedziczenie typu tabela na beton (TPC) i modele dziedziczenia mieszanego są obsługiwane przez środowisko uruchomieniowe platformy Entity Framework, ale nie są obsługiwane przez program EF Projektant. Jeśli chcesz użyć TPC lub dziedziczenia mieszanego, masz dwie opcje: użyj funkcji Code First lub ręcznie edytuj plik EDMX. Jeśli zdecydujesz się pracować z plikiem EDMX, okno Szczegóły mapowania zostanie umieszczone w trybie awaryjnym i nie będzie można użyć projektanta do zmiany mapowań.

Wymagania wstępne

W celu wykonania instrukcji w tym przewodniku potrzebne są następujące elementy:

  • Najnowsza wersja programu Visual Studio.
  • Przykładowa baza danych School.

Konfigurowanie projektu

  • Otwórz program Visual Studio 2012.
  • Wybieranie pozycji Plik — nowy —>> projekt
  • W okienku po lewej stronie kliknij pozycję Visual C#, a następnie wybierz szablon Konsola.
  • Wprowadź TPTDBFirstSample jako nazwę.
  • Wybierz przycisk OK.

Tworzenie modelu

  • Kliknij prawym przyciskiem myszy projekt w Eksplorator rozwiązań, a następnie wybierz polecenie Dodaj —> nowy element.
  • Wybierz pozycję Dane z menu po lewej stronie, a następnie wybierz pozycję ADO.NET Model danych jednostki w okienku Szablony.
  • Wprowadź wartość TPTModel.edmx jako nazwę pliku, a następnie kliknij przycisk Dodaj.
  • W oknie dialogowym Wybieranie zawartości modelu wybierz pozycję** Wygeneruj z bazy danych**, a następnie kliknij przycisk Dalej.
  • Kliknij pozycję Nowy Połączenie ion. W oknie dialogowym Właściwości Połączenie ion wprowadź nazwę serwera (na przykład (localdb)\mssqllocaldb), wybierz metodę uwierzytelniania, wpisz School jako nazwę bazy danych, a następnie kliknij przycisk OK. Okno dialogowe Wybieranie Połączenie danych zostanie zaktualizowane przy użyciu ustawienia połączenia z bazą danych.
  • W oknie dialogowym Wybieranie obiektów bazy danych w węźle Tabele wybierz tabele Dział, Kurs, OnlineCourse i OnsiteCourse .
  • Kliknij przycisk Finish (Zakończ).

Zostanie wyświetlona Projektant Jednostka, która udostępnia powierzchnię projektową do edycji modelu. Wszystkie obiekty wybrane w oknie dialogowym Wybieranie obiektów bazy danych są dodawane do modelu.

Implementowanie dziedziczenia tabeli na typ

  • Na powierzchni projektowej kliknij prawym przyciskiem myszy typ jednostki OnlineCourse i wybierz pozycję Właściwości.
  • W oknie Właściwości ustaw właściwość Typ podstawowy na Course.
  • Kliknij prawym przyciskiem myszy typ jednostki OnsiteCourse i wybierz pozycję Właściwości.
  • W oknie Właściwości ustaw właściwość Typ podstawowy na Course.
  • Kliknij prawym przyciskiem myszy skojarzenie (wiersz) między typami jednostek OnlineCourse i Course . Wybierz pozycję Usuń z modelu.
  • Kliknij prawym przyciskiem myszy skojarzenie między typami jednostek OnsiteCourse i Course . Wybierz pozycję Usuń z modelu.

Teraz usuniemy właściwość CourseID z pola OnlineCourse i OnsiteCourse , ponieważ te klasy dziedziczą identyfikator CourseID z typu podstawowego kursu .

  • Kliknij prawym przyciskiem myszy właściwość CourseID typu jednostki OnlineCourse, a następnie wybierz pozycję Usuń z modelu.
  • Kliknij prawym przyciskiem myszy właściwość CourseID typu jednostki OnsiteCourse, a następnie wybierz polecenie Usuń z modelu
  • Dziedziczenie tabeli na typ jest teraz implementowane.

Table Per Type

Korzystanie z modelu

Otwórz plik Program.cs, w którym zdefiniowano metodę Main. Wklej następujący kod do funkcji Main . Kod wykonuje trzy zapytania. Pierwsze zapytanie przywraca wszystkie kursy związane z określonym działem. Drugie zapytanie używa metody OfType , aby zwrócić klasy OnlineCourses powiązane z określonym działem. Trzecie zapytanie zwraca wartość OnsiteCourses.

    using (var context = new SchoolEntities())
    {
        foreach (var department in context.Departments)
        {
            Console.WriteLine("The {0} department has the following courses:",
                               department.Name);

            Console.WriteLine("   All courses");
            foreach (var course in department.Courses )
            {
                Console.WriteLine("     {0}", course.Title);
            }

            foreach (var course in department.Courses.
                OfType<OnlineCourse>())
            {
                Console.WriteLine("   Online - {0}", course.Title);
            }

            foreach (var course in department.Courses.
                OfType<OnsiteCourse>())
            {
                Console.WriteLine("   Onsite - {0}", course.Title);
            }
        }
    }