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.
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);
}
}
}