Freigeben über


Gewusst wie: Erstellen und Ausführen von Objektabfragen mithilfe der 'Tabelle pro Hierarchie'-Vererbung (Entity Framework)

Die Vererbung im Entitätsdatenmodell (EDM) stellt dieselben Vorteile bereit wie die Vererbung in der objektorientierten Programmierung. Instanzen von Typen in der Hierarchie können gemeinsam oder als Instanzen eines der Untertypen bearbeitet werden. Alle Untertypen erben die Eigenschaften des Basistyps und ggf. kann auf zusätzliche Eigenschaften, die von Untertypen implementiert werden, zugegriffen werden.

So erstellen Sie das Projekt, in dem 'Tabelle pro Hierarchie'-Vererbung verwendet wird

  1. Erstellen Sie ein Konsolenanwendungsprojekt, und fügen Sie Verweise auf System.Data.Entity und System.Runtime.Serialization hinzu.

  2. Fügen Sie einen Verweis auf die aus dem Vererbungsmodell im Thema Gewusst wie: Definieren eines Modells mit 'Tabelle pro Hierarchie'-Vererbung (Entity Framework) erstellten DLL hinzu.

  3. Kopieren Sie die Schemas aus dem Thema Gewusst wie: Definieren eines Modells mit 'Tabelle pro Hierarchie'-Vererbung (Entity Framework) in denselben Ordner wie die ausführbare Datei.

  4. Fügen Sie eine Anwendungskonfigurationsdatei mit dem Inhalt des folgenden Beispiels hinzu.

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <connectionStrings><add name="SchoolDataLibContainer" 
   connectionString=
   "metadata=res://*/SchoolDataLib.csdl|
   res://*/SchoolDataLib.ssdl|
   res://*/SchoolDataLib.msl;provider=System.Data.SqlClient;
   provider connection string=&quot;
   Data Source=localhost;
   Initial Catalog=SchoolData;Integrated Security=True;
   MultipleActiveResultSets=True&quot;" 
   providerName="System.Data.EntityClient" />
  </connectionStrings>
</configuration>

Beispiel

Der folgende Code zeigt alle Instanzen von Typen in der Hierarchie in einer foreach-Schleife an, die Instanzen von Typen aus der People-Auflistung im SchoolDataEntitiesObjectContext aufzählt.

Der Typ jeder Instanz wird durch einen Aufruf der GetType-Methode angezeigt.

Die zweite foreach-Schleife verwendet einen OfType-Filter für die People-Auflistung, um nur Instanzen vom Typ Instructor zurückzugeben.

Nur der Typ "Instructor" enthält die HireDate-Eigenschaft. Der Code zeigt HireDate gemeinsam mit Vor- und Nachnamen der von der Abfrage zurückgegebenen "Instructor"-Elementen an.

Option Strict On
Option Explicit On
Imports System
Imports System.Collections.Generic
Imports System.Linq
Imports System.Text
Imports SchoolDataLib

Module Module1

    Sub Main()
        Try
            Using objectContext As SchoolDataLibContainer = New SchoolDataLibContainer()
                ' Display departments and administrators.
                For Each dept As Department In objectContext.Departments
                    Console.WriteLine("School: {0} Budget: {1}", _
                        dept.Name, dept.Budget)

                    ' Load associated person reference.
                    dept.AdministratorReference.Load()
                    If dept.Administrator IsNot Nothing Then
                        Console.WriteLine("Administrator: {0} {1}", _
                            dept.Administrator.FirstName, _
                            dept.Administrator.LastName)
                    End If

                    For Each student As Student In objectContext.People.OfType(Of Student)()
                        Console.WriteLine("Student: {0} {1}", student.FirstName, _
                            student.LastName)
                    Next

                    For Each person As Person In objectContext.People
                        Console.WriteLine("{0} Name: {1}", _
                            person.GetType().Name, person.LastName)
                    Next

                    For Each instructor In objectContext.People. _
                            OfType(Of Instructor)()
                        Console.WriteLine("Instructor: {0} {1} Hire Date: {2}", _
                            instructor.FirstName, _
                            instructor.LastName, _
                            instructor.HireDate)
                    Next

                Next
            End Using

        Catch ex As System.Data.MappingException
            Console.WriteLine(ex.ToString())
        Catch ex As System.Data.UpdateException
            Console.WriteLine(ex.ToString())
        End Try
    End Sub

End Module
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using SchoolDataLib;
using System.Data.Objects;

namespace SchoolDataClient
{
    class Program
    {
        static void Main(string[] args)
        {
            try
            {
                using (SchoolDataLibContainer objectContext =
                                      new SchoolDataLibContainer ())
                {
                    // Display departments and administrators.
                    foreach (Department dept in objectContext.Departments)
                    {
                        Console.WriteLine("School: {0} Budget: {1}",
                            dept.Name,
                            dept.Budget);

                        // Load associated person reference.
                        dept.AdministratorReference.Load();
                        if (null != dept.Administrator)
                            Console.WriteLine("Administrator: {0} {1}",
                                         dept.Administrator.FirstName,
                                         dept.Administrator.LastName);
                    }

                    foreach (Student student in
                        objectContext.People.OfType<Student>())
                    {
                        Console.WriteLine("Student: {0} {1}", student.FirstName,
                            student.LastName);

                    }

                    
                    foreach (Person person in objectContext.People)
                        Console.WriteLine("{0} Name: {1}",
                            person.GetType().Name,
                            person.LastName);

                    foreach (Instructor instructor in
                        objectContext.People.OfType<Instructor>())
                        Console.WriteLine("Instructor: {0} {1} Hire Date: {2}",
                            instructor.FirstName,
                            instructor.LastName,
                            instructor.HireDate);

                    objectContext.Connection.Close();
                }
            }

            catch (System.Data.MappingException e)
            {
                Console.WriteLine(e.ToString());
            }
            catch (System.Data.UpdateException e)
            {
                Console.WriteLine(e.ToString());
            }
        }
    }
}

Siehe auch

Aufgaben

Gewusst wie: Definieren eines Modells mit 'Tabelle pro Hierarchie'-Vererbung (Entity Framework)

Konzepte

Vererbung (EDM)