dzielenie tabeli Projektant
W tym przewodniku pokazano, jak mapować wiele typów jednostek na jedną tabelę, modyfikując model przy użyciu Projektant Entity Framework (EF Projektant).
Jednym z powodów, dla których warto użyć dzielenia tabel, jest opóźnienie ładowania niektórych właściwości podczas ładowania leniwego w celu załadowania obiektów. Można oddzielić właściwości, które mogą zawierać bardzo dużą ilość danych w oddzielnej jednostce i ładować je tylko wtedy, gdy jest to wymagane.
Na poniższej ilustracji przedstawiono główne okna używane podczas pracy z Projektant EF.
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
Ten przewodnik korzysta z programu Visual Studio 2012.
- Otwórz program Visual Studio 2012.
- W menu Plik wskaż polecenie Nowy, a następnie kliknij pozycję Projekt.
- W okienku po lewej stronie kliknij pozycję Visual C#, a następnie wybierz szablon Aplikacja konsolowa.
- Wprowadź wartość TableSplittingSample jako nazwę projektu i kliknij przycisk OK.
Tworzenie modelu na podstawie bazy danych szkoły
- Kliknij prawym przyciskiem myszy nazwę projektu w Eksplorator rozwiązań, wskaż polecenie Dodaj, a następnie kliknij pozycję 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ść TableSplittingModel.edmx jako nazwę pliku, a następnie kliknij przycisk Dodaj.
- W oknie dialogowym Wybieranie zawartości modelu wybierz pozycję Generuj 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 rozwiń węzeł Tabele i zaznacz tabelę Person . Spowoduje to dodanie określonej tabeli do modelu School .
- 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.
Mapowanie dwóch jednostek na jedną tabelę
W tej sekcji podzielisz jednostkę Person na dwie jednostki, a następnie zamapujesz je na jedną tabelę.
Uwaga
Jednostka Person nie zawiera żadnych właściwości, które mogą zawierać dużą ilość danych; jest ona używana jako przykład.
- Kliknij prawym przyciskiem myszy pusty obszar powierzchni projektowej, wskaż polecenie Dodaj nowy, a następnie kliknij pozycję Jednostka. Zostanie wyświetlone okno dialogowe Nowa jednostka .
- Wpisz HireInfo jako nazwę jednostki i PersonID jako nazwę właściwości klucza.
- Kliknij przycisk OK.
- Nowy typ jednostki jest tworzony i wyświetlany na powierzchni projektowej.
- Wybierz właściwość HireDate typu jednostki Person i naciśnij klawisze Ctrl+X.
- Wybierz jednostkę HireInfo i naciśnij klawisze Ctrl+V.
- Utwórz skojarzenie między osobami i HireInfo. Aby to zrobić, kliknij prawym przyciskiem myszy pusty obszar powierzchni projektowej, wskaż polecenie Dodaj nowy, a następnie kliknij pozycję Skojarzenie.
- Zostanie wyświetlone okno dialogowe Dodawanie skojarzenia . Nazwa PersonHireInfo jest domyślnie podana.
- Określ wielodostępność 1(Jeden) na obu końcach relacji.
- Naciśnij przycisk OK.
Następny krok wymaga okna Szczegóły mapowania. Jeśli nie widzisz tego okna, kliknij prawym przyciskiem myszy powierzchnię projektową i wybierz pozycję Szczegóły mapowania.
Wybierz typ jednostki HireInfo i kliknij pozycję <Dodaj tabelę lub widok> w oknie Szczegóły mapowania.
Wybierz pozycję Osoba z listy rozwijanej< Dodaj tabelę lub widok>. Lista zawiera tabele lub widoki, do których można zamapować wybraną jednostkę. Odpowiednie właściwości powinny być domyślnie mapowane.
Wybierz skojarzenie PersonHireInfo na powierzchni projektowej.
Kliknij prawym przyciskiem myszy skojarzenie na powierzchni projektowej i wybierz pozycję Właściwości.
W oknie Właściwości wybierz właściwość Ograniczenia odwołań i kliknij przycisk wielokropka.
Wybierz pozycję Person (Osoba ) z listy rozwijanej Principal (Podmiot zabezpieczeń ).
Naciśnij przycisk OK.
Korzystanie z modelu
- Wklej następujący kod w metodzie Main.
using (var context = new SchoolEntities())
{
Person person = new Person()
{
FirstName = "Kimberly",
LastName = "Morgan",
Discriminator = "Instructor",
};
person.HireInfo = new HireInfo()
{
HireDate = DateTime.Now
};
// Add the new person to the context.
context.People.Add(person);
// Insert a row into the Person table.
context.SaveChanges();
// Execute a query against the Person table.
// The query returns columns that map to the Person entity.
var existingPerson = context.People.FirstOrDefault();
// Execute a query against the Person table.
// The query returns columns that map to the Instructor entity.
var hireInfo = existingPerson.HireInfo;
Console.WriteLine("{0} was hired on {1}",
existingPerson.LastName, hireInfo.HireDate);
}
- Skompiluj i uruchom aplikację.
Następujące instrukcje języka T-SQL zostały wykonane względem bazy danych School w wyniku uruchomienia tej aplikacji.
Następujące polecenie INSERT zostało wykonane w wyniku wykonania kontekstu. SaveChanges() i łączy dane z jednostek Person i HireInfo
Następujące polecenie SELECT zostało wykonane w wyniku wykonania pliku context.Osoby. FirstOrDefault() i wybiera tylko kolumny zamapowane na osobę
Następujące polecenie SELECT zostało wykonane w wyniku uzyskania dostępu do właściwości nawigacji istniejącejPerson.Instructor i wybiera tylko kolumny zamapowane na HireInfo