Typy złożone — ef Projektant

W tym temacie przedstawiono sposób mapowania typów złożonych za pomocą Projektant Entity Framework (EF Projektant) oraz wykonywania zapytań dotyczących jednostek zawierających właściwości typu złożonego.

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

EF Designer

Uwaga

Podczas tworzenia modelu koncepcyjnego mogą pojawić się ostrzeżenia dotyczące niezamapowanych jednostek i skojarzeń na liście błędów. Możesz zignorować te ostrzeżenia, ponieważ po wybraniu opcji wygenerowania bazy danych z modelu błędy zostaną wycofane.

Co to jest typ złożony

Typy złożone to właściwości nieskalarne typów jednostek, które umożliwiają organizowanie właściwości skalarnych w jednostkach. Podobnie jak jednostki, złożone typy składają się z właściwości skalarnych lub innych właściwości typu złożonego.

Podczas pracy z obiektami reprezentującymi złożone typy należy pamiętać o następujących kwestiach:

  • Typy złożone nie mają kluczy i dlatego nie mogą istnieć niezależnie. Typy złożone mogą istnieć tylko jako właściwości typów jednostek lub innych typów złożonych.
  • Typy złożone nie mogą uczestniczyć w skojarzeniach i nie mogą zawierać właściwości nawigacji.
  • Właściwości typu złożonego nie mogą mieć wartości null. Wyjątek **InvalidOperationException **występuje, gdy wywoływana jest funkcja DbContext.SaveChanges , a napotkany jest obiekt złożony o wartości null. Właściwości skalarne złożonych obiektów mogą mieć wartość null.
  • Typy złożone nie mogą dziedziczyć z innych typów złożonych.
  • Należy zdefiniować typ złożony jako klasę
  • Program EF wykrywa zmiany elementów członkowskich w obiekcie typu złożonego, gdy jest wywoływana funkcja DbContext.DetectChanges . Program Entity Framework automatycznie wywołuje metodę DetectChanges, gdy są wywoływane następujące elementy członkowskie: DbSet.Find, DbSet.Local, DbSet.Remove, DbSet.Add, DbSet.Attach, DbContext.SaveChanges, DbContext.GetValidationErrors, DbContext.Entry, DbChangeTracker.Entrys.

Refaktoryzacja właściwości jednostki do nowego typu złożonego

Jeśli masz już jednostkę w modelu koncepcyjnym, możesz chcieć refaktoryzować niektóre właściwości do właściwości typu złożonego.

Na powierzchni projektanta wybierz co najmniej jedną właściwości (z wyłączeniem właściwości nawigacji) jednostki, a następnie kliknij prawym przyciskiem myszy i wybierz polecenie Refaktoryzacja —> przenieś do nowego typu złożonego.

Refactor Into New Complex Type

Nowy typ złożony z wybranymi właściwościami jest dodawany do przeglądarki modelu. Typ złożony ma nazwę domyślną.

Właściwość złożona nowo utworzonego typu zastępuje wybrane właściwości. Wszystkie mapowania właściwości są zachowywane.

Refactor Into New Complex Type 2

Tworzenie nowego typu złożonego

Można również utworzyć nowy typ złożony, który nie zawiera właściwości istniejącej jednostki.

Kliknij prawym przyciskiem myszy folder Typy złożone w przeglądarce modelu, wskaż polecenie DodajNowy typ złożony.... Alternatywnie możesz wybrać folder Typy złożone i nacisnąć klawisz Insert na klawiaturze.

Add New Complex type

Nowy typ złożony jest dodawany do folderu o nazwie domyślnej. Teraz możesz dodać właściwości do typu.

Dodawanie właściwości do typu złożonego

Właściwości typu złożonego mogą być typami skalarnym lub istniejącymi typami złożonymi. Jednak właściwości typu złożonego nie mogą mieć odwołań cyklicznych. Na przykład typ złożony OnsiteCourseDetails nie może mieć właściwości typu złożonego OnsiteCourseDetails.

Właściwość można dodać do typu złożonego na dowolny z poniższych sposobów.

  • Kliknij prawym przyciskiem myszy typ złożony w przeglądarce modelu, wskaż polecenie Dodaj, a następnie wskaż właściwość skalarną lub właściwość złożoną, a następnie wybierz żądany typ właściwości. Alternatywnie możesz wybrać typ złożony, a następnie nacisnąć klawisz Insert na klawiaturze.

    Add Properties to Complex Type

    Nowa właściwość jest dodawana do typu złożonego o nazwie domyślnej.

  • LUB-

  • Kliknij prawym przyciskiem myszy właściwość jednostki na powierzchni Projektant EF i wybierz polecenie Kopiuj, a następnie kliknij prawym przyciskiem myszy typ złożony w przeglądarce modelu i wybierz polecenie Wklej.

Zmienianie nazwy typu złożonego

Po zmianie nazwy typu złożonego wszystkie odwołania do typu są aktualizowane w całym projekcie.

  • Powoli kliknij dwukrotnie typ złożony w przeglądarce modelu. Nazwa zostanie wybrana i w trybie edycji.

  • LUB-

  • Kliknij prawym przyciskiem myszy typ złożony w przeglądarcemodelu i wybierz polecenie Zmień nazwę.

  • LUB-

  • Wybierz typ złożony w przeglądarce modelu i naciśnij klawisz F2.

  • LUB-

  • Kliknij prawym przyciskiem myszy typ złożony w przeglądarcemodelu i wybierz polecenie Właściwości. Edytuj nazwę w oknie Właściwości .

Dodawanie istniejącego typu złożonego do jednostki i mapowania jej właściwości na kolumny tabeli

  1. Kliknij prawym przyciskiem myszy jednostkę, wskaż polecenie Dodaj nowy, a następnie wybierz pozycję Właściwość złożona. Do jednostki jest dodawana właściwość typu złożonego o domyślnej nazwie. Do właściwości jest przypisywany domyślny typ (wybrany z istniejących typów złożonych).

  2. Przypisz żądany typ do właściwości w oknie Właściwości . Po dodaniu właściwości typu złożonego do jednostki należy zamapować jej właściwości na kolumny tabeli.

  3. Kliknij prawym przyciskiem myszy typ jednostki na powierzchni projektowej lub w przeglądarce modelu i wybierz pozycję Mapowania tabel. Mapowania tabeli są wyświetlane w oknie Szczegóły mapowania.

  4. Rozwiń węzeł Mapy do <węzła Nazwa> tabeli. Zostanie wyświetlony węzeł Mapowania kolumn.

  5. Rozwiń węzeł Mapowania kolumn. Zostanie wyświetlona lista wszystkich kolumn w tabeli. Domyślne właściwości (jeśli istnieją), do których mapa kolumn jest wyświetlana pod nagłówkiem Wartość/Właściwość .

  6. Wybierz kolumnę, którą chcesz zamapować, a następnie kliknij prawym przyciskiem myszy odpowiednie pole Wartość/Właściwość . Zostanie wyświetlona lista rozwijana wszystkich właściwości skalarnych.

  7. Wybierz odpowiednią właściwość.

    Map Complex Type

  8. Powtórz kroki 6 i 7 dla każdej kolumny tabeli.

Uwaga

Aby usunąć mapowanie kolumn, wybierz kolumnę, którą chcesz zamapować, a następnie kliknij pole Wartość/Właściwość . Następnie wybierz pozycję Usuń z listy rozwijanej.

Mapuj importowanie funkcji na typ złożony

Importy funkcji są oparte na procedurach składowanych. Aby zamapować importowanie funkcji do typu złożonego, kolumny zwracane przez odpowiednią procedurę składowaną muszą być zgodne z właściwościami typu złożonego w liczbie i muszą mieć typy magazynów zgodne z typami właściwości.

  • Kliknij dwukrotnie zaimportowaną funkcję, którą chcesz zamapować na typ złożony.

    Function Imports

  • Wypełnij ustawienia importowania nowej funkcji w następujący sposób:

    • Określ procedurę składowaną, dla której tworzysz import funkcji w polu Nazwa procedury składowanej. To pole jest listą rozwijaną zawierającą wszystkie procedury składowane w modelu magazynu.

    • Określ nazwę importu funkcji w polu Nazwa importu funkcji.

    • Wybierz pozycję Złożone jako typ zwracany, a następnie określ określony złożony typ zwracany, wybierając odpowiedni typ z listy rozwijanej.

      Edit Function Import

  • Kliknij przycisk OK. Wpis importu funkcji jest tworzony w modelu koncepcyjnym.

Dostosowywanie mapowania kolumn na potrzeby importowania funkcji

  • Kliknij prawym przyciskiem myszy importowanie funkcji w przeglądarce modelu i wybierz pozycję Mapowanie importu funkcji. Zostanie wyświetlone okno Szczegóły mapowania i zostanie wyświetlone domyślne mapowanie importowania funkcji. Strzałki wskazują mapowania między wartościami kolumn i wartościami właściwości. Domyślnie nazwy kolumn są zakładane jako takie same jak nazwy właściwości typu złożonego. Domyślne nazwy kolumn są wyświetlane w szarym tekście.
  • W razie potrzeby zmień nazwy kolumn tak, aby odpowiadały nazwam kolumn zwracanych przez procedurę składowaną odpowiadającą importowi funkcji.

Usuwanie typu złożonego

Po usunięciu typu złożonego typ jest usuwany z modelu koncepcyjnego i mapowania dla wszystkich wystąpień typu zostaną usunięte. Odwołania do typu nie są jednak aktualizowane. Jeśli na przykład jednostka ma właściwość typu złożonego typu ComplexType1 i ComplexType1 zostanie usunięta w przeglądarce modelu, odpowiednia właściwość jednostki nie zostanie zaktualizowana. Model nie zostanie zweryfikowany, ponieważ zawiera jednostkę odwołującą się do usuniętego typu złożonego. Odwołania do usuniętych typów złożonych można aktualizować lub usuwać przy użyciu Projektant jednostki.

  • Kliknij prawym przyciskiem myszy typ złożony w przeglądarce modelu i wybierz polecenie Usuń.

  • LUB-

  • Wybierz typ złożony w przeglądarce modelu i naciśnij klawisz Delete na klawiaturze.

Zapytanie o jednostki zawierające właściwości typu złożonego

Poniższy kod pokazuje, jak wykonać zapytanie zwracające kolekcję obiektów typu jednostki, które zawierają właściwość typu złożonego.

    using (SchoolEntities context = new SchoolEntities())
    {
        var courses =
            from c in context.OnsiteCourses
            order by c.Details.Time
            select c;

        foreach (var c in courses)
        {
            Console.WriteLine("Time: " + c.Details.Time);
            Console.WriteLine("Days: " + c.Details.Days);
            Console.WriteLine("Location: " + c.Details.Location);
        }
    }