Udostępnij za pośrednictwem


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.

EF Designer

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.

    Mapping Properties

  • 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

    Insert Combining Person and HireInfo Data

  • Następujące polecenie SELECT zostało wykonane w wyniku wykonania pliku context.Osoby. FirstOrDefault() i wybiera tylko kolumny zamapowane na osobę

    Select 1

  • 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

    Select 2