Freigeben über


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

Vererbungen können auf verschiedene Weise im Entitätsdatenmodell (EDM) implementiert werden. Die "Tabelle pro Typ"-Methode verwendet zum Verwalten der Daten für jeden Typ in der Vererbungshierarchie eine eigene gespeicherte Tabelle. In diesem Abschnitt finden Sie Schemas und Mapping für eine einfache Vererbungshierarchie, die in einem "Tabelle pro Typ"-Szenario implementiert ist.

Im EDM enthält das konzeptionelle Schema für eine Vererbungshierarchie im "Tabelle pro Typ"-Modell die BaseType-Attributzuweisung für Deklarationen von abgeleiteten Typen. Jeder abgeleitete EntityType wird getrennt deklariert, die Deklaration von EntityContainer enthält jedoch nur eine EntitySet-Deklaration für den Basistyp.

Zuordnungen werden in diesem Szenario nur im Basistyp implementiert, da die Definitionen der Zuordnungen auf EntitySet-Deklarationen verweisen. Ein abgeleiteter Typ verfügt über keine EntitySet-Deklaration im EntityContainer.

So implementieren Sie das konzeptionelle Schema für eine 'Tabelle pro Typ'-Vererbung

  1. Erstellen Sie ein Klassenbibliotheksprojekt.

  2. Klicken Sie auf Neues Element hinzufügen, und fügen Sie ein ADO.NET Entity Data Model hinzu.

  3. Wenn der Assistent angezeigt wird, erstellen Sie ein leeres Modell.

  4. Öffnen Sie die EDMX-Datei mit einem XML-Editor, und suchen Sie nach dem CSDL-Segment der Datei.

  5. Implementieren Sie das CSDL-Schema. Dieses Schema enthält Deklarationen in einem SchoolDataLib benannten Namespace. Die Vererbungshierarchie enthält als Basistyp einen EntityType mit dem Namen Department sowie drei abgeleitete Entitäten für eine Geschäftsabteilung (Department of Business), eine Technikabteilung (Department of Engineering) und eine Musikabteilung (Department of Music). Nur der Basistyp Department enthält eine Key-Attributzuweisung. Die abgeleiten Typen DeptBusiness, DeptEngineering und DeptMusic enthalten die BaseType-Attributzuweisung. Die Key-Spalten der Tabellen, die die abgeleiteten Typen im Speicher darstellen, werden alle der Key-Spalte der Tabelle zugeordnet, die den Basistyp darstellt.

  6. Implementieren Sie einen AssociationType zwischen den Entitäten Department und Person. Diese Zuordnung wird in der Implementierung der Navigationseigenschaft für einen SchoolAdministrator verwendet. Der FK_Department_Administrator legt die von allen Typen verwendete Zuordnung fest, die vom Department-Typ abgeleitet werden, für den sie deklariert ist. Die NavigationProperty, die diesen AssociationType verwendet, wird von allen abgeleiteten Typen geerbt. Das vollständige CSDL-Schema ist im Folgenden dargestellt.

   <!-- CSDL content -->
      <Schema
          xmlns="https://schemas.microsoft.com/ado/2006/04/edm"
          Namespace="SchoolDataLib"
          Alias="Self">

        <EntityType Name="Department">
          <!--Base type table-per-type inheritance-->
          <Key>
            <PropertyRef Name="DepartmentID" />
          </Key>
          <Property Name="DepartmentID" Type="Int32" Nullable="false" />
          <Property Name="Name" Type="String" Nullable="false" />
          <Property Name="Budget" Type="Decimal" Nullable="false" />
          <Property Name="StartDate" Type="DateTime" Nullable="false" />
          <NavigationProperty Name="Administrator"
                              Relationship="SchoolDataLib.FK_Department_Administrator"
                              FromRole="Department" ToRole="Person" />
        </EntityType>

        <EntityType Name="DeptBusiness" BaseType="SchoolDataLib.Department">
          <Property Name="LegalBudget" Type="Decimal" Nullable="false" />
          <Property Name="AccountingBudget" Type="Decimal" Nullable="false" />
        </EntityType>

        <EntityType Name="DeptEngineering" BaseType="SchoolDataLib.Department">
          <Property Name="FiberOpticsBudget" Type="Decimal" Nullable="false" />
          <Property Name="LabBudget" Type="Decimal" Nullable="false" />
        </EntityType>

        <EntityType Name="DeptMusic" BaseType="SchoolDataLib.Department">
          <Property Name="TheaterBudget" Type="Decimal" Nullable="false" />
          <Property Name="InstrumentBudget" Type="Decimal" Nullable="false" />
        </EntityType>

        <Association Name="FK_Department_Administrator">
          <End Role="Person" Type="SchoolDataLib.Person" Multiplicity="0..1" />
          <End Role="Department" Type="SchoolDataLib.Department" Multiplicity="*" />
        </Association>

        <EntityType Name="Person">
          <!--Base type table-per-hierarchy inheritance-->
          <Key>
            <PropertyRef Name="PersonID" />
          </Key>
          <Property Name="PersonID" Type="Int32" Nullable="false" />
          <Property Name="FirstName" Type="String" Nullable="false" />
          <Property Name="LastName" Type="String" Nullable="false" />
          <NavigationProperty Name="Department"
                              Relationship="SchoolDataLib.FK_Department_Administrator"
                              FromRole="Person" ToRole="Department" />
        </EntityType>

        <EntityType Name="Student" BaseType="SchoolDataLib.Person">
          <Property Name="EnrollmentDate" Type="DateTime" />
        </EntityType>

        <EntityType Name="Instructor" BaseType="SchoolDataLib.Person">
          <Property Name="HireDate" Type="DateTime" />
        </EntityType>

        <EntityType Name="Administrator" BaseType="SchoolDataLib.Person">
          <Property Name="AdminDate" Type="DateTime" />
        </EntityType>

        <EntityContainer Name="SchoolDataLibContainer">
          <EntitySet Name="Departments" EntityType="SchoolDataLib.Department" />
          <EntitySet Name="People" EntityType="SchoolDataLib.Person" />

          <AssociationSet Name="FK_Department_Administrator"
                          Association="SchoolDataLib.FK_Department_Administrator">
            <End Role="Person" EntitySet="People" />
            <End Role="Department" EntitySet="Departments" />
          </AssociationSet>
        </EntityContainer>

      </Schema>

So implementieren Sie das Speicherschema für eine "Tabelle pro Typ"-Vererbung

  1. Definieren Sie die Tabellen, die die Daten für die einzelnen Typen in der Vererbungshierarchie im SSDL-Segment der EDMX-Datei enthalten. Im Gegensatz zu den Entitätsdeklarationen im konzeptionellen Schema enthalten die Entitäten für die abgeleiteten Typen im Speichermodell eine Key-Eigenschaft.

  2. Verwenden Sie die Datentypen des Datenbankmanagementsystems anstelle der CLR-Typen (Common Language Runtime), die im konzeptionellen Schema für Eigenschaften im Speicherschema verwendet werden.

  3. Verwenden Sie die folgende Syntax in SSDL, um die vollständigen Speichermetadaten zu definieren, die in diesem Vererbungsszenario verwendet werden.

<!-- SSDL content -->
      <Schema
          xmlns="https://schemas.microsoft.com/ado/2006/04/edm/ssdl"
          Namespace="SchoolDataLib.Target"
          Provider="System.Data.SqlClient"
          ProviderManifestToken="2005"
          Alias="Self">

        <EntityContainer Name="dbo">
          <EntitySet Name="Department" EntityType="SchoolDataLib.Target.Department" />
          <EntitySet Name="DeptBusiness" EntityType="SchoolDataLib.Target.DeptBusiness" />
          <EntitySet Name="DeptEngineering" EntityType="SchoolDataLib.Target.DeptEngineering" />
          <EntitySet Name="DeptMusic" EntityType="SchoolDataLib.Target.DeptMusic" />
          <EntitySet Name="Person" EntityType="SchoolDataLib.Target.Person" />

          <AssociationSet Name="FK_Department_Administrator"
                          Association="SchoolDataLib.Target.FK_Department_Administrator">
            <End Role="Person" EntitySet="Person" />
            <End Role="Department" EntitySet="Department" />
          </AssociationSet>

        </EntityContainer>

        <EntityType Name="Department">
          <Key>
            <PropertyRef Name="DepartmentID" />
          </Key>
          <Property Name="DepartmentID" Type="int" Nullable="false" />
          <Property Name="Name" Type="nvarchar" Nullable="false" MaxLength="50" />
          <Property Name="Budget" Type="money" Nullable="false" />
          <Property Name="StartDate" Type="datetime" Nullable="false" />
          <Property Name="Administrator" Type="int" />
        </EntityType>

        <EntityType Name="DeptBusiness">
          <Key>
            <PropertyRef Name="BusinessDeptID" />
          </Key>
          <Property Name="BusinessDeptID" Type="int" Nullable="false" />
          <Property Name="LegalBudget" Type="money" Nullable="false" />
          <Property Name="AccountingBudget" Type="money" Nullable="false" />
        </EntityType>

        <EntityType Name="DeptEngineering">
          <Key>
            <PropertyRef Name="EngineeringDeptID" />
          </Key>
          <Property Name="EngineeringDeptID" Type="int" Nullable="false" />
          <Property Name="FiberOpticsBudget" Type="money" Nullable="false" />
          <Property Name="LabBudget" Type="money" Nullable="false" />
        </EntityType>

        <EntityType Name="DeptMusic">
          <Key>
            <PropertyRef Name="DeptMusicID" />
          </Key>
          <Property Name="DeptMusicID" Type="int" Nullable="false" />
          <Property Name="TheaterBudget" Type="money" Nullable="false" />
          <Property Name="InstrumentBudget" Type="money" Nullable="false" />
        </EntityType>

        <EntityType Name="Person">
          <Key>
            <PropertyRef Name="PersonID" />
          </Key>
          <Property Name="PersonID" Type="int" Nullable="false" />
          <Property Name="FirstName" Type="nvarchar" Nullable="false" MaxLength="50" />
          <Property Name="LastName" Type="nvarchar" Nullable="false" MaxLength="50" />
          <Property Name="HireDate" Type="datetime" />
          <Property Name="EnrollmentDate" Type="datetime" />
          <Property Name="AdminDate" Type="datetime" />
          <Property Name="PersonCategory" Type="smallint" Nullable="false" />
        </EntityType>

        <Association Name="FK_Department_Administrator">
          <End Role="Person" Type="SchoolDataLib.Target.Person" Multiplicity="0..1" />
          <End Role="Department" Type="SchoolDataLib.Target.Department" Multiplicity="*" />
          <ReferentialConstraint>
            <Principal Role="Person">
              <PropertyRef Name="PersonID" />
            </Principal>
            <Dependent Role="Department">
              <PropertyRef Name="Administrator" />
            </Dependent>
          </ReferentialConstraint>
        </Association>

      </Schema>

So erstellen Sie eine Datenbank mithilfe von SQL Server Management Studio

  1. Verwenden Sie das folgende Skript in SQL Server Management Studio, um die Datenbank zu erstellen, die für dieses Beispiel sowie für das Beispiel Gewusst wie: Definieren eines Modells mit 'Tabelle pro Hierarchie'-Vererbung (Entity Framework) verwendet wird.

  2. Zeigen Sie im Menü Datei auf Neu, und klicken Sie dann auf Datenbankmodul-Abfrage.

  3. Geben Sie im Dialogfeld Verbindung mit Datenbankmodul herstellen entweder localhost oder den Namen einer anderen SQL Server-Instanz ein, und klicken Sie anschließend auf Verbinden.

  4. Fügen Sie das folgende Transact-SQL-Skript im Abfragefenster ein, und klicken Sie dann auf Ausführen.

USE [master]
GO

CREATE DATABASE [SchoolData] 
GO

USE [SchoolData]
GO

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[DeptBusiness]') AND type in (N'U'))
BEGIN
CREATE TABLE [dbo].[DeptBusiness](
    [BusinessDeptID] [int] NOT NULL,
    [LegalBudget] [money] NOT NULL,
    [AccountingBudget] [money] NOT NULL,
 CONSTRAINT [PK_DeptBusiness] PRIMARY KEY CLUSTERED 
(
    [BusinessDeptID] ASC
)WITH (PAD_INDEX  = OFF, IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
END
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[DeptEngineering]') AND type in (N'U'))
BEGIN
CREATE TABLE [dbo].[DeptEngineering](
    [EngineeringDeptID] [int] NOT NULL,
    [FiberOpticsBudget] [money] NOT NULL,
    [LabBudget] [money] NOT NULL,
 CONSTRAINT [PK_DeptEngineering] PRIMARY KEY CLUSTERED 
(
    [EngineeringDeptID] ASC
)WITH (PAD_INDEX  = OFF, IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
END
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[DeptMusic]') AND type in (N'U'))
BEGIN
CREATE TABLE [dbo].[DeptMusic](
    [DeptMusicID] [int] NOT NULL,
    [TheaterBudget] [money] NOT NULL,
    [InstrumentBudget] [money] NOT NULL,
 CONSTRAINT [PK_DeptMusic] PRIMARY KEY CLUSTERED 
(
    [DeptMusicID] ASC
)WITH (PAD_INDEX  = OFF, IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
END
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[Course]') AND type in (N'U'))
BEGIN
CREATE TABLE [dbo].[Course](
    [CourseID] [int] NOT NULL,
    [Title] [nvarchar](100) NOT NULL,
    [StartDate] [datetime] NOT NULL,
    [EndDate] [datetime] NOT NULL,
    [Credits] [int] NULL,
 CONSTRAINT [PK_Course] PRIMARY KEY CLUSTERED 
(
    [CourseID] ASC
)WITH (PAD_INDEX  = OFF, IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
END
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[Person]') AND type in (N'U'))
BEGIN
CREATE TABLE [dbo].[Person](
    [PersonID] [int] NOT NULL,
    [FirstName] [nvarchar](50) NOT NULL,
    [LastName] [nvarchar](50) NOT NULL,
    [HireDate] [datetime] NULL,
    [EnrollmentDate] [datetime] NULL,
    [PersonCategory] [smallint] NOT NULL,
    [AdminDate] [datetime] NULL,
 CONSTRAINT [PK_Person] PRIMARY KEY CLUSTERED 
(
    [PersonID] ASC
)WITH (PAD_INDEX  = OFF, IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
END
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[Enrollment]') AND type in (N'U'))
BEGIN
CREATE TABLE [dbo].[Enrollment](
    [EnrollmentID] [int] NOT NULL,
    [CourseID] [int] NOT NULL,
    [StudentID] [int] NOT NULL,
 CONSTRAINT [PK_Enrollment] PRIMARY KEY CLUSTERED 
(
    [EnrollmentID] ASC
)WITH (PAD_INDEX  = OFF, IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
END
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[CourseInstructor]') AND type in (N'U'))
BEGIN
CREATE TABLE [dbo].[CourseInstructor](
    [CourseInstructorID] [int] NOT NULL,
    [CourseID] [int] NOT NULL,
    [InstructorID] [int] NOT NULL,
 CONSTRAINT [PK_CourseInstructor] PRIMARY KEY CLUSTERED 
(
    [CourseInstructorID] ASC
)WITH (PAD_INDEX  = OFF, IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
END
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
IF NOT EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[Department]') AND type in (N'U'))
BEGIN
CREATE TABLE [dbo].[Department](
    [DepartmentID] [int] NOT NULL,
    [Name] [nvarchar](50) NOT NULL,
    [Budget] [money] NOT NULL,
    [StartDate] [datetime] NOT NULL,
    [Administrator] [int] NULL,
 CONSTRAINT [PK_Department] PRIMARY KEY CLUSTERED 
(
    [DepartmentID] ASC
)WITH (PAD_INDEX  = OFF, IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]
END
GO
IF NOT EXISTS (SELECT * FROM sys.foreign_keys WHERE object_id = OBJECT_ID(N'[dbo].[FK_Enrollment_Course]') AND parent_object_id = OBJECT_ID(N'[dbo].[Enrollment]'))
ALTER TABLE [dbo].[Enrollment]  WITH CHECK ADD  CONSTRAINT [FK_Enrollment_Course] FOREIGN KEY([CourseID])
REFERENCES [dbo].[Course] ([CourseID])
GO
ALTER TABLE [dbo].[Enrollment] CHECK CONSTRAINT [FK_Enrollment_Course]
GO
IF NOT EXISTS (SELECT * FROM sys.foreign_keys WHERE object_id = OBJECT_ID(N'[dbo].[FK_Enrollment_Student]') AND parent_object_id = OBJECT_ID(N'[dbo].[Enrollment]'))
ALTER TABLE [dbo].[Enrollment]  WITH CHECK ADD  CONSTRAINT [FK_Enrollment_Student] FOREIGN KEY([StudentID])
REFERENCES [dbo].[Person] ([PersonID])
GO
ALTER TABLE [dbo].[Enrollment] CHECK CONSTRAINT [FK_Enrollment_Student]
GO
IF NOT EXISTS (SELECT * FROM sys.foreign_keys WHERE object_id = OBJECT_ID(N'[dbo].[FK_CourseInstructor_Course]') AND parent_object_id = OBJECT_ID(N'[dbo].[CourseInstructor]'))
ALTER TABLE [dbo].[CourseInstructor]  WITH CHECK ADD  CONSTRAINT [FK_CourseInstructor_Course] FOREIGN KEY([CourseID])
REFERENCES [dbo].[Course] ([CourseID])
GO
ALTER TABLE [dbo].[CourseInstructor] CHECK CONSTRAINT [FK_CourseInstructor_Course]
GO
IF NOT EXISTS (SELECT * FROM sys.foreign_keys WHERE object_id = OBJECT_ID(N'[dbo].[FK_CourseInstructor_Instructor]') AND parent_object_id = OBJECT_ID(N'[dbo].[CourseInstructor]'))
ALTER TABLE [dbo].[CourseInstructor]  WITH CHECK ADD  CONSTRAINT [FK_CourseInstructor_Instructor] FOREIGN KEY([InstructorID])
REFERENCES [dbo].[Person] ([PersonID])
GO
ALTER TABLE [dbo].[CourseInstructor] CHECK CONSTRAINT [FK_CourseInstructor_Instructor]
GO
IF NOT EXISTS (SELECT * FROM sys.foreign_keys WHERE object_id = OBJECT_ID(N'[dbo].[FK_Department_Administrator]') AND parent_object_id = OBJECT_ID(N'[dbo].[Department]'))
ALTER TABLE [dbo].[Department]  WITH CHECK ADD  CONSTRAINT [FK_Department_Administrator] FOREIGN KEY([Administrator])
REFERENCES [dbo].[Person] ([PersonID])
GO
ALTER TABLE [dbo].[Department] CHECK CONSTRAINT [FK_Department_Administrator]

So implementieren Sie die Mapping-Spezifikation für eine 'Tabelle pro Typ'-Vererbung

  1. Kombinieren Sie die EntityTypeMapping-Tags für die abgeleiteten Typen unter dem EntitySet-Mapping für den Basistyp. Im folgenden MSL-Schema erhält EntitySet entsprechend der Definition im konzeptionellen Schema den Namen Departments.

  2. Verwenden Sie EntityTypeMapping-Tags unter dem EntitySet-Mapping sowohl für den Basistyp als auch für abgeleitete Typen.

  3. Legen Sie jeden unter EntityTypeMapping zugeordneten Typ mit dem TypeName-Attribut fest.

  4. Geben Sie anschließend ein TableName-Attribut mit einem TableMappingFragment an.

  5. Ordnen Sie mithilfe von ScalarProperty-Tags die Eigenschaften der Entitätstypen den in den Speichermetadaten festgelegten Spalten zu.

  6. Beachten Sie, dass die Identitätsspalten der abgeleiteten Typen alle der Identitätseigenschaft des Basistyps zugeordnet sind, die in diesem Fall mit DepartmentID benannt ist.

  7. Verwenden Sie die folgende MSL-Syntax, um ein EntitySet mithilfe der Basisklasse Department zuzuordnen.

  8. Legen Sie ein EntityTypeMapping für jeden abgeleiteten Typ fest.

<!-- C-S mapping content -->
<Mapping xmlns="urn:schemas-microsoft-com:windows:storage:mapping:CS"
               Space="C-S">
        <Alias Key="Model" Value="SchoolDataLib" />
        <Alias Key="Target" Value="SchoolDataLib.Target" />
        <EntityContainerMapping CdmEntityContainer="SchoolDataLibContainer" 
                  StorageEntityContainer="dbo">
          
          <!-- Mapping for table-per-type inheritance-->
          <EntitySetMapping Name="Departments">
            <EntityTypeMapping 
                     TypeName="IsTypeOf(SchoolDataLib.Department)">
              <MappingFragment StoreEntitySet="Department">
                <ScalarProperty 
                     Name="DepartmentID" ColumnName="DepartmentID" />
                <ScalarProperty Name="Name" ColumnName="Name" />
                <ScalarProperty Name="Budget" ColumnName="Budget" />
                <ScalarProperty 
                     Name="StartDate" ColumnName="StartDate" />
              </MappingFragment>
            </EntityTypeMapping>

            <EntityTypeMapping TypeName="SchoolDataLib.DeptBusiness">
              <MappingFragment StoreEntitySet="DeptBusiness">
                <ScalarProperty Name="DepartmentID" 
                                ColumnName="BusinessDeptID" />
                <ScalarProperty Name="AccountingBudget" 
                                ColumnName="AccountingBudget" />
                <ScalarProperty Name="LegalBudget" 
                                ColumnName="LegalBudget" />
              </MappingFragment>
            </EntityTypeMapping>

            <EntityTypeMapping TypeName="SchoolDataLib.DeptEngineering">
              <MappingFragment StoreEntitySet="DeptEngineering">
                <ScalarProperty Name="DepartmentID" 
                                ColumnName="EngineeringDeptID" />
                <ScalarProperty Name="FiberOpticsBudget" 
                                ColumnName="FiberOpticsBudget" />
                <ScalarProperty Name="LabBudget" 
                                ColumnName="LabBudget" />
              </MappingFragment>
            </EntityTypeMapping>

            <EntityTypeMapping TypeName="SchoolDataLib.DeptMusic">
              <MappingFragment StoreEntitySet="DeptMusic">
                <ScalarProperty Name="DepartmentID" 
                                ColumnName="DeptMusicID" />
                <ScalarProperty Name="TheaterBudget" 
                                ColumnName="TheaterBudget" />
                <ScalarProperty Name="InstrumentBudget" 
                                ColumnName="InstrumentBudget" />
              </MappingFragment>
            </EntityTypeMapping>
          </EntitySetMapping>

          <!--Mapping for table-per-hierarchy inheritance-->
          <EntitySetMapping Name="People">
            <EntityTypeMapping TypeName="SchoolDataLib.Person">
              <MappingFragment StoreEntitySet="Person">
                <ScalarProperty Name="PersonID" ColumnName="PersonID"/>
                <ScalarProperty Name="FirstName" ColumnName="FirstName"/>
                <ScalarProperty Name="LastName" ColumnName="LastName"/>
                <Condition ColumnName="PersonCategory" Value="0" />
              </MappingFragment>
            </EntityTypeMapping>

            <EntityTypeMapping TypeName="SchoolDataLib.Student">
              <MappingFragment StoreEntitySet="Person">
                <ScalarProperty Name="PersonID" ColumnName="PersonID" />
                <ScalarProperty Name="FirstName" ColumnName="FirstName" />
                <ScalarProperty Name="LastName" ColumnName="LastName" />
                <ScalarProperty 
                  Name="EnrollmentDate" ColumnName="EnrollmentDate" />
                <Condition ColumnName="PersonCategory" Value="1" />
              </MappingFragment>
            </EntityTypeMapping>

            <EntityTypeMapping TypeName="SchoolDataLib.Instructor">
              <MappingFragment StoreEntitySet="Person">
                <ScalarProperty Name="PersonID" ColumnName="PersonID" />
                <ScalarProperty Name="FirstName" ColumnName="FirstName" />
                <ScalarProperty Name="LastName" ColumnName="LastName" />
                <ScalarProperty Name="HireDate" ColumnName="HireDate" />
                <Condition ColumnName="PersonCategory" Value="2" />
              </MappingFragment>
            </EntityTypeMapping>

            <EntityTypeMapping TypeName="SchoolDataLib.Administrator">
              <MappingFragment StoreEntitySet="Person">
                <ScalarProperty Name="PersonID" ColumnName="PersonID" />
                <ScalarProperty Name="FirstName" ColumnName="FirstName" />
                <ScalarProperty Name="LastName" ColumnName="LastName" />
                <ScalarProperty Name="AdminDate" ColumnName="AdminDate" />
                <Condition ColumnName="PersonCategory" Value="3" />
              </MappingFragment>
            </EntityTypeMapping>

          </EntitySetMapping>


          <AssociationSetMapping Name="FK_Department_Administrator"
                    TypeName="SchoolDataLib.FK_Department_Administrator"
                    StoreEntitySet="Department">
            <EndProperty Name="Person">
              <ScalarProperty Name="PersonID" ColumnName="Administrator" />
            </EndProperty>
            <EndProperty Name="Department">
              <ScalarProperty Name="DepartmentID" ColumnName="DepartmentID" />
            </EndProperty>
            <Condition ColumnName="Administrator" IsNull="false" />
          </AssociationSetMapping>
        </EntityContainerMapping>
      </Mapping>

Siehe auch

Aufgaben

Gewusst wie: Definieren eines Modells mit einer 'Tabelle pro Typ'-Vererbung (Entity Framework)
Gewusst wie: Hinzufügen und Ändern von Objekten mit der 'Tabelle pro Typ'-Vererbung (Entity Framework)
Gewusst wie: Definieren eines Modells mit 'Tabelle pro Hierarchie'-Vererbung (Entity Framework)

Konzepte

Vererbung (EDM)