Implementieren von Entitäten (EDM)

In allen Entitätsdatenmodell-Anwendungen (EDM) werden Entitäten in der (CSDL) definiert und den Metadaten zugeordnet, die die Datenstrukturen in der (SSDL) beschreiben. In diesem Beispiel wird das Entwerfen einer einzelnen Entität und deren Speicherzuordnung erläutert.

Die Anwendung, für die diese Beispielentität entworfen wird, definiert Informationen über die Mitarbeiter eines Unternehmens.

Konzeptionelles Schema

Die in der folgenden CSDL-Syntax definierte Entität enthält die Spezifikation für einen Datentyp im Namespace mit dem Namen Employes. Der Namespace enthält eine einzelne EntityType-Deklaration: Employees.

Die Eigenschaften der Entität Employees enthalten grundlegende Informationen zur Identifizierung von Mitarbeitern. Die EmployeeId-Eigenschaft wird als ein Guid-Wert deklariert, der eine Instanz des Typs eindeutig identifiziert. Die Eigenschaft EmployeeId ist als Schlüssel gekennzeichnet.

Der Mitarbeiter wird durch drei weitere Eigenschaften identifiziert: FirstName, LastName und Email-Adresse.

Ein CSDL-Schema enthält zusätzlich zur Entitätsspezifikation die EntitySet- und die EntityContainer-Deklaration. Die EntityContainer- und EntitySet-Spezifikationen definieren den Bereich der Datentypen im Datenmodell. Der EntityContainer enthält das EntitySet. In diesem Beispiel enthält das EntitySet mit dem Namen Employees den Employee-Typ.

<?xml version="1.0" encoding="utf-8"?>
<Schema Namespace="Employees" Alias="Self" xmlns="https://schemas.microsoft.com/ado/2006/04/edm">
  <EntityContainer Name="EmployeesContext">
    <EntitySet Name="Employees" EntityType="Employees.Employees" />
  </EntityContainer>
  <EntityType Name="Employees">
    <Key>
      <PropertyRef Name="EmployeeId" />
    </Key>
    <Property Name="EmployeeId" Type="Guid" Nullable="false" />
    <Property Name="LastName" Type="String" Nullable="false" />
    <Property Name="FirstName" Type="String" Nullable="false" />
    <Property Name="Email" Type="String" Nullable="false" />
  </EntityType>
</Schema>

Das Namespace-Schema enthält die Employee-Entität und alle Datensätze mit Ausnahme des EntityContainer, der getrennt und unabhängig vom Namespace-Schema ist. Weitere Informationen zum EntityContainer finden Sie unter EntityContainerMapping-Element (MSL).

Anwendungen, die auf der Grundlage dieses Datenmodells erstellt werden, verweisen auf den Namespace, um die auf diesem Modell basierende Klasse zu verwenden.

Diese CSDL-Spezifikation wird als Konzept- oder Entwurfsschema bezeichnet. Die parallelen Entitätsnamen in den Speichermetadaten der SSDL-Syntax entsprechen den Speicherstrukturen. Das EntitySet in diesem CSDL-Schema entspricht dem Namen einer im SSDL-Schema festgelegten Tabelle. Die Tabelle enthält die Daten für die Instanzen der Entität Employee, die von den mit diesem Modell erstellten Anwendungen verwendet werden. Die Eigenschaften der Employee-Entität entsprechen den Spalten der Tabelle.

Speicherschema

Die Speichermetadaten in SSDL beschreiben die Datenbank, die die im konzeptionellen Schema definierten Instanzen von Employees enthält.

Der im folgenden Schema definierte Employees.Store-Namespace ist die im konzeptionellen Schema definierte Zieldatenbank des Employees-Modells.

Das EntitySetEmployees stellt in diesem Schema eine Datentabelle mit dem Namen Employees dar. Der durch dieses Schema angegebene EntityType entspricht dem im konzeptionellen Schema definierten EntityType. Der Name in den Speichermetadaten muss mit dem Namen der Datenbanktabelle, jedoch nicht mit dem Namen im konzeptionellen Schema übereinstimmen.

Im folgenden Schema wird das Datenbankobjekt dbo beschrieben, das von dem in der SSDL-Datei angegebenen EntityContainer dargestellt wird. Der EntityContainer enthält in diesem Beispiel die Tabelle Employees.

?xml version="1.0" encoding="utf-8"?>
<Schema Namespace="Employees.Store" Alias="Self"
    Provider="System.Data.SqlClient"
    ProviderManifestToken="2005"
    xmlns="https://schemas.microsoft.com/ado/2006/04/edm/ssdl">
  <EntityContainer Name="dbo">
    <EntitySet Name="Employees" EntityType="Employees.Store.Employees" />
  </EntityContainer>
  <EntityType Name="Employees">
    <Key>
      <PropertyRef Name="EmployeeId" />
    </Key>
    <Property Name="EmployeeId" Type="uniqueidentifier" Nullable="false" />
    <Property Name="LastName" Type="nvarchar" Nullable="false" MaxLength="50" />
    <Property Name="FirstName" Type="nvarchar" Nullable="false" />
    <Property Name="Email" Type="nvarchar" Nullable="false" />
  </EntityType>
</Schema>

Mapping-Spezifikation

Die Mapping-Spezifikation wird in der Mapping-Spezifikationssprache (MSL) definiert. Diese MSL-Spezifikation verwendet die Metadaten im SSDL-Schema, um eine Verbindung des CSDL-Schemas mit der Datenbank herzustellen.

Die Elemente dieses MSL-Schemas beinhalten das EntityContainerMapping, den StorageEntityContainer, das EntityTypeMapping, ein MappingFragment und ScalarProperty-Zuordnungen. Das EntityContainerMapping ordnet einen CdmEntityContainer einem StorageEntityContainer zu. In diesem Fall wird der EmployeeSkills-Entitycontainer dem Datenbankobjekt dbo zugeordnet.

Beachten Sie, dass dem StorageEntityContainer und CdmEntityContainer zugewiesene Namen nicht von Schemanamespaces qualifiziert wurden. StorageEntityContainer und CdmEntityContainer sind vom Schemaelement sowohl im konzeptionellen Schema als auch in den Speichermetadaten getrennt und unabhängig. Durch das Qualifizieren eines StorageEntityContainer und eines CdmEntityContainer mithilfe eines Namespaces wird eine Mappingausnahme ausgelöst.

Im Anschluss an das Mapping des****StorageEntityContainer und des CdmEntityContainer legt das EntitySetMapping das StoreEntitySet fest, das dem konzeptionellen

TypeName, Employees entspricht.

TypeName-Eigenschaften werden von ScalarProperty-Elementen als Name-Attribute zugewiesen, die einem ColumnName-Element entsprechen, z. B.: Name="EmployeeId" ColumnName="EmployeeId". Die Name-Syntax legt eine Eigenschaft einer Entität im konzeptionellen Schema fest, und ColumnName legt eine Spalte der Employees-Datentabelle in der Zieldatenbank fest.

<?xml version="1.0" encoding="utf-8"?>
<Mapping Space="C-S" 
     xmlns="urn:schemas-microsoft-com:windows:storage:mapping:CS">

  <EntityContainerMapping StorageEntityContainer="dbo"
        CdmEntityContainer="EmployeesContext">
    <EntitySetMapping Name="Employees" StoreEntitySet="Employees"
        TypeName="Employees.Employees">

      <ScalarProperty Name="EmployeeId" ColumnName="EmployeeId" />
      <ScalarProperty Name="LastName" ColumnName="LastName" />
      <ScalarProperty Name="FirstName" ColumnName="FirstName" />
      <ScalarProperty Name="Email" ColumnName="Email" />

    </EntitySetMapping>
  </EntityContainerMapping>
</Mapping>

Siehe auch

Konzepte

Implementieren von Zuordnungen (EDM)

Weitere Ressourcen

Schemas und Mappingspezifikation (Entity Framework)
EDM-Spezifikationen