Udostępnij za pośrednictwem


dzielenie jednostek Projektant

W tym przewodniku pokazano, jak zamapować typ jednostki na dwie tabele, modyfikując model przy użyciu Projektant Entity Framework (EF Projektant). Jednostkę można mapować na wiele tabel, gdy tabele mają wspólny klucz. Koncepcje, które mają zastosowanie do mapowania typu jednostki na dwie tabele, można łatwo rozszerzyć w celu mapowania typu jednostki na więcej niż dwie tabele.

Na poniższej ilustracji przedstawiono główne okna używane podczas pracy z Projektant EF.

EF Designer

Wymagania wstępne

Visual Studio 2012 lub Visual Studio 2010, Ultimate, Premium, Professional lub Web Express.

Tworzenie bazy danych

Serwer bazy danych zainstalowany w programie Visual Studio różni się w zależności od zainstalowanej wersji programu Visual Studio:

  • Jeśli używasz programu Visual Studio 2012, utworzysz bazę danych LocalDB.
  • Jeśli używasz programu Visual Studio 2010, utworzysz bazę danych SQL Express.

Najpierw utworzymy bazę danych z dwiema tabelami, które będziemy łączyć w jedną jednostkę.

  • Otwórz program Visual Studio.
  • Widok —> Eksplorator serwera
  • Kliknij prawym przyciskiem myszy pozycję Połączenie ions danych —> Dodaj Połączenie ion...
  • Jeśli nie nawiązaliśmy połączenia z bazą danych z Eksploratora serwera przed wybraniem programu Microsoft SQL Server jako źródła danych
  • Połączenie do lokalnej bazy danych lub programu SQL Express, w zależności od zainstalowanego
  • Wprowadź EntitySplitting jako nazwę bazy danych
  • Wybierz przycisk OK i zostanie wyświetlony monit o utworzenie nowej bazy danych, wybierz pozycję Tak
  • Nowa baza danych będzie teraz wyświetlana w Eksploratorze serwera
  • Jeśli używasz programu Visual Studio 2012
    • Kliknij prawym przyciskiem myszy bazę danych w Eksploratorze serwera i wybierz pozycję Nowe zapytanie
    • Skopiuj następujący kod SQL do nowego zapytania, a następnie kliknij prawym przyciskiem myszy zapytanie i wybierz polecenie Wykonaj
  • Jeśli używasz programu Visual Studio 2010
    • Wybierz pozycję Dane —> Edytor Transact SQL —> nowe zapytanie Połączenie ion...
    • Wprowadź ciąg .\SQLEXPRESS jako nazwę serwera, a następnie kliknij przycisk OK
    • Wybierz bazę danych EntitySplitting z listy rozwijanej w górnej części edytora zapytań
    • Skopiuj następujący kod SQL do nowego zapytania, a następnie kliknij prawym przyciskiem myszy zapytanie i wybierz polecenie Wykonaj sql
CREATE TABLE [dbo].[Person] (
[PersonId] INT IDENTITY (1, 1) NOT NULL,
[FirstName] NVARCHAR (200) NULL,
[LastName] NVARCHAR (200) NULL,
CONSTRAINT [PK_Person] PRIMARY KEY CLUSTERED ([PersonId] ASC)
);

CREATE TABLE [dbo].[PersonInfo] (
[PersonId] INT NOT NULL,
[Email] NVARCHAR (200) NULL,
[Phone] NVARCHAR (50) NULL,
CONSTRAINT [PK_PersonInfo] PRIMARY KEY CLUSTERED ([PersonId] ASC),
CONSTRAINT [FK_Person_PersonInfo] FOREIGN KEY ([PersonId]) REFERENCES [dbo].[Person] ([PersonId]) ON DELETE CASCADE
);

Tworzenie projektu

  • 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ść MapEntityToTablesSample jako nazwę projektu i kliknij przycisk OK.
  • Kliknij przycisk Nie , jeśli zostanie wyświetlony monit o zapisanie zapytania SQL utworzonego w pierwszej sekcji.

Tworzenie modelu na podstawie bazy danych

  • 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ść MapEntityToTablesModel.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.
  • Wybierz połączenie EntitySplitting z listy rozwijanej, a następnie kliknij przycisk Dalej.
  • W oknie dialogowym Wybieranie obiektów bazy danych zaznacz pole wyboru obok węzła Tabele . Spowoduje to dodanie wszystkich tabel z bazy danych EntitySplitting do modelu.
  • Kliknij przycisk Finish (Zakończ).

Zostanie wyświetlona Projektant Jednostka, która udostępnia powierzchnię projektową do edycji modelu.

Mapuj jednostkę na dwie tabele

W tym kroku zaktualizujemy typ jednostki Osoba, aby połączyć dane z tabel Person i PersonInfo.

  • Wybierz właściwości Email i Telefon jednostki **PersonInfo**, a następnie naciśnij klawisze Ctrl+X.

  • Wybierz jednostkę **Person **i naciśnij klawisze Ctrl+V .

  • Na powierzchni projektowej wybierz jednostkę PersonInfo i naciśnij przycisk Usuń na klawiaturze.

  • Kliknij przycisk Nie po wyświetleniu monitu, czy chcesz usunąć tabelę PersonInfo z modelu, zamierzamy zamapować ją na jednostkę Person .

    Delete Tables

Następne kroki wymagają 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 Osoba, a następnie kliknij pozycję <Dodaj tabelę lub widok> w oknie Szczegóły mapowania.
  • Wybierz pozycję **PersonInfo ** z listy rozwijanej. Okno Szczegóły mapowania zostało zaktualizowane przy użyciu domyślnych mapowań kolumn. Są one odpowiednie dla naszego scenariusza.

Typ jednostki Person jest teraz mapowany na tabele Person i PersonInfo .

Mapping 2

Korzystanie z modelu

  • Wklej następujący kod w metodzie Main.
    using (var context = new EntitySplittingEntities())
    {
        var person = new Person
        {
            FirstName = "John",
            LastName = "Doe",
            Email = "john@example.com",
            Phone = "555-555-5555"
        };

        context.People.Add(person);
        context.SaveChanges();

        foreach (var item in context.People)
        {
            Console.WriteLine(item.FirstName);
        }
    }
  • Skompiluj i uruchom aplikację.

Następujące instrukcje języka T-SQL zostały wykonane względem bazy danych w wyniku uruchomienia tej aplikacji. 

  • Następujące dwie instrukcje INSERT zostały wykonane w wyniku wykonywania kontekstu. SaveChanges(). Przyjmują dane z jednostki Person i dzielą je między tabelami Person i PersonInfo.

    Insert 1

    Insert 2

  • Następujące polecenie SELECT zostało wykonane w wyniku wyliczenia osób w bazie danych. Łączy ona dane z tabeli Person and PersonInfo .

    Select Combining Person and PersonInfo Data