Schemas (EDM)

Ein Entitätsdatenmodell (EDM)-Schema ist eine XML-Textdatei, die Typen von Entitäten und Beziehungen beschreibt. Das Schema definiert außerdem einen Container, in dem Instanzen dieser Typen logisch organisiert sind. Entitäten und Zuordnungen im EDM definieren die mit Entity Framework installierten Basistypen sowie die von Entwicklern entworfenen Typen.

Ein Entwurfsschema wird in der konzeptionellen Schemadefinitionssprache (CSDL) geschrieben. Ein zweites, in der Datenspeicherschema-Definitionssprache (SSDL) geschriebenes Schema definiert das Speichermodell für eine Anwendung, die das EDM verwendet.

In diesem Thema werden die in CSDL geschriebenen Entwurfsschemas beschrieben. Weitere Informationen zu Speichermetadaten und Mapping-Schemas finden Sie unter Schemas und Mappingspezifikation (Entity Framework).

Vom Element der obersten Eben ein einem Schema wird ein Namespace zugewiesen, in dem Regeln zur Eindeutigkeit von Namen gelten. Die im folgenden verkürzten Schema definierten Typen sind unter dem Namespace MyCompany.LOBSchema logisch organisiert. Dieser Namespace ähnelt einem Namespace bei objektorientierter Programmierung, der Klassen und prozeduralen Code enthält. Im EDM werden keine Prozeduren festgelegt. Weitere Informationen über die Implementierung von Prozeduren im EDM finden Sie unter Hilfsmethoden (EDM).

Jede im folgenden Schema definierte Entität und Zuordnung verfügt über einen vollqualifizierten Namen, wie z. B. MyCompany.LOBSchema.Customer. Vollqualifizierte Namen werden im Beispiel durch den für den MyCompany.LOBSchema-Namespace deklarierten Self-Alias abgekürzt, wie bei Self.Customer.

Entitäten und Zuordnungen werden im Hauptteil des Schemas definiert. Die Eigenschaften der in diesem Beispiel definierten Entitäten werden ausgelassen, um die Gesamtstruktur eines CSDL-Schemas zu verdeutlichen.

<?xml version="1.0" encoding="utf-8"?>
<Schema xmlns="https://schemas.microsoft.com/ado/2006/04/edm" 
        Namespace="MyCompany.LOBSchema" Alias="Self">

    <Documentation>
      <Summary>Conceptual schema (csdl)</Summary>
      <LongDescription>This schema is an example showing 
        general syntax.</LongDescription>
    </Documentation>

    <EntityType Name="Customer">
        <Key>
            <PropertyRef Name="CustomerId" />
        </Key>
        <Property Name="CustomerId" Type="Guid" Nullable="false" />
        <!-- Other properties-->
    </EntityType>

    <EntityType Name="Order">
        <Key>
            <PropertyRef Name="OrderId" />
        </Key>
        <Property Name="OrderId" Type="Guid" Nullable="false" />
        <!-- Other properties-->
    </EntityType>

    <Association Name="Customer_Order">
        <End Role="Customer" Type="Self.Customer" Multiplicity="0..1" />
        <End Role="Order" Type="Self.Order" Multiplicity="*" />
    </Association>

    <EntityContainer Name="LOBSchemaData">
        <EntitySet Name="Customers" EntityType="Self.Customer" />
        <EntitySet Name="Orders" EntityType="Self.Order" />
        <AssociationSet Name="Customer_Orders" Association="Self.Customer_Order">
            <End Role="Customer" EntitySet="Customers" />
            <End Role="Order" EntitySet="Orders" />
        </AssociationSet>
    </EntityContainer>
</Schema>

Ein Alias für ein Schema, das in einer anderen CSDL-Datei definiert ist, kann mit dem Using-Tag definiert werden, sodass vorhandene Typen in externen Schemas ohne vollqualifizierte Syntax definiert und im Namespace verwendet werden können.

In vollständigen Schemas enthalten Entitätsdeklarationen Eigenschaften. Eine dieser Eigenschaften ist die Schlüssel-Eigenschaft. Das Schlüssel-Attribut eines EntityType gibt eine oder mehrere Eigenschaften der Entität als Schlüssel an. Der Schlüssel kann eine Zusammensetzung mehrerer Eigenschaften sein. Mit dem Schlüssel werden Instanzen einer Entität für alle Operationen eindeutig identifiziert.

Innerhalb des öffnendenEntityType-Tags im folgenden Beispiel wird nach der Zuweisung des Name-Attributs für die Entität das Schlüssel-Attribut CustomerId zugewiesen. Das Typ-Attribut der CustomerIdSchlüssel-Eigenschaft ist auf Guid festgelegt, um einen eindeutigen Wert für den Schlüssel anzugeben. Die Deklaration der CustomerId-Eigenschaft folgt in der zweiten Zeile dieses CSDL-Segments.

    <EntityType Name="Customer" >
        <Key>
            <PropertyRef Name="CustomerId" />
        </Key>
        <Property Name="CustomerId" Type="Guid" Nullable="false" />
        <Property Name="Title" Type="String" Nullable="false" />
    </EntityType>

In der letzten Zeile des Beispiels wird eine Eigenschaft mit dem Namen Title deklariert, und der Typ der Title-Eigenschaft wird als String zugewiesen. Die Title-Eigenschaft gibt die Tätigkeitsrolle des Kunden an. Die Title-Eigenschaft kann nicht Null sein, wie durch die Einschränkung Nullability="false" angegeben. Das Standard-Attribut des String-Typs der Title-Eigenschaft ist auf "NewHire" festgelegt.

Ein zusammengesetzter Schlüssel kann wie im folgenden Beispiel angegeben werden.

<EntityType Name="EmployeePayHistory">
    <Key>
      <PropertyRef Name="EmployeeID" />
      <PropertyRef Name="RateChangeDate" />
    </Key>
    <Property Name="EmployeeID" Type="Int32" Nullable="false" />
    <Property Name="RateChangeDate" Type="DateTime" Nullable="false"/>
    <Property Name="Rate" Type="Decimal" Nullable="false"/>
    <Property Name="PayFrequency" Type="Boolean" Nullable="false" />
    <Property Name="ModifiedDate" Type="DateTime" Nullable="false" />
    <NavigationProperty Name="Employee"
Relationship="Adventureworks.FK_EmployeePayHistory_Employee_EmployeeID"
 FromRole="EmployeePayHistory" ToRole="Employee" />
  </EntityType>

Entitätencontainer

Schemas, die das EDM verwenden, definieren einen Entitätencontainer, um die Sätze von Datentypen anzugeben, die im zu definierenden Namespace verfügbar sind. Der Entitätencontainer ist die Basis für den Namespace im programmierbaren Objektmodell, das aus dem CSDL-Schema erstellt wird.

In der XML-Hierarchie ist das EntityContainer-Element vom Schema-Element getrennt, obwohl der EntityContainer in einem Schema definiert ist. Dies ist beim Mapping des EntityContainer zum Speicher wichtig. DieEntityContainer-Tags im konzeptionellen Schema werden den entsprechenden EntityContainer-Tags in den Speichermetadaten zugeordnet. Beachten Sie, dass der vollqualifizierte Name des EntityContainer in der Mappingdatei nicht den Namen des Schemanamespace enthält.

Entitätenmengen modellieren die Klassen des programmierbaren Objektmodells. Zuordnungssätze definieren den Gültigkeitsbereich von Beziehungen. Weitere Informationen über Entitätenmengen und Zuordnungssätze finden Sie unter Entitätenmengen (EDM) und Zuordnungssätze (EDM).

Das folgende Schemasegment enthält dieEntityContainer-Deklaration für den LOBSchemaData-Namespace im MyCompany.LOBSchema-Namespace.

    <EntityContainer Name="LOBSchemaData">
        <EntitySet Name="Customers" EntityType="Self.Customer"/>
        <EntitySet Name="Orders" EntityType="Self.Order"/>
        <AssociationSet Name="Customer_Orders" 
                          Association="Self.Customer_Order">
            <End Role="Customer" EntitySet="Customers"/>
            <End Role="Order" EntitySet="Orders"/>
        </AssociationSet>
    </EntityContainer>

Diese EntityContainer-Deklaration enthält alle in früheren Codesegmenten definierten Entitäten und Zuordnungen jetzt in Form von Mengen, die durch das EntitySet-Tag und das AssociationSet-Tag angegeben werden.

Wenn die Spezifikationen dieses Schemas als Datentypen implementiert werden, ist jede Instanz eines Customer oder Order ein Member der entsprechenden EntitySet. Dieser Entitätencontainer definiert Mengen der Customer-Entität und der Order-Entität, die in den Pluralformen benannt sind: Customers und Orders. Entwickler können ihre eigenen Namenskonventionen definieren. Weitere Informationen darüber, wie die Namen in Beziehung zu den Namen in den Speichermetadaten und der Mapping-Spezifikation stehen, finden Sie unter Schemas und Mappingspezifikation (Entity Framework).

Die AssociationSet-Tags in der vorherigen EntityContainer-Deklaration geben einen Zuordnungssatz namens Customer_Orders an. Dieser Zuordnungssatz enthält Instanzen der Customer_Order-Zuordnung.

Diese Elemente (EntityType, EntitySet, Zuordnung, AssociationSet und EntityContainer) bilden zusammen die grundlegende Struktur eines Schemas. Weitere zeilenweise Informationen über Deklarationen in Schemas finden Sie unter Schemas und Mappingspezifikation (Entity Framework).

Bereitstellung

Die EDM-Spezifikation schreibt nicht das Speichermodell vor, das nach der Definition der Entitätstypen in CSDL verwendet wird. Im häufigsten Szenario ist die Datenquelle ein relationales Datenbankverwaltungssystem (RDBMS). Für die Bereitstellung des Speichermodells müssen eine Datenbank sowie Tabellen erstellt werden, die den im Schema definierten Entitäten entsprechen. Für die Implementierung können auch Fremdschlüssel in den Datentabellen und/oder Verbindungstabellen erforderlich sein, um Zuordnungen zu unterstützen.

Das EDM kann mit einer bestehenden Datenbank verwendet werden, indem die Datenbank und die Tabellen EDM-Typen zugeordnet werden. Bestehende Programmierobjektmodelle können ebenfalls EDM-Typen zugeordnet werden.

Siehe auch

Konzepte

Entity Data Model-Beziehungen
Entity Data Model-Typen
EntityType-Element (CSDL)
EntitySet-Element (EntityContainer CSDL)
Association-Element (CSDL)
AssociationSet-Element (EntityContainer CSDL)
EntityContainer-Element (CSDL)

Weitere Ressourcen

Schemas und Mappingspezifikation (Entity Framework)