Share via


Gewusst wie: Anpassen von Modellierungs- und Zuordnungsdateien zur Verwendung mit benutzerdefinierten Objekten (Entity Framework)

Zur Verwendung von benutzerdefinierten Datenklassen mit Entity Framework müssen die Entitätstypen und Eigenschaften, die im konzeptionellen Modell definiert sind, den benutzerdefinierten Datenklassen zugeordnet werden. Werden die Entity Data Model -Tools verwendet, um den Modell- und Zuordnungsinhalt einer Datenbank zu erstellen, stimmen die Entitätstypen und -sätze im konzeptionellen Modell mit den Tabellen in der Datenbank überein. Führen Sie die folgenden Schritte aus, um den Modell- und Zuordnungsinhalt so anzupassen, dass er mit den benutzerdefinierten Datenklassen übereinstimmt:

  1. Aktualisieren Sie den Inhalt des konzeptionellen Modells, der in konzeptioneller Schemadefinitionssprache (CSDL) angegeben ist, damit er mit den benutzerdefinierten Datenklassen übereinstimmt.

  2. Aktualisieren Sie bei Bedarf den Speichermodellinhalt, der in der Datenspeicherschema-Definitionssprache (SSDL) definiert ist.

  3. Aktualisieren Sie den Zuordnungsinhalt, der in der Mapping-Spezifikationssprache (MSL) definiert ist.

  4. Überprüfen Sie den aktualisierten Modell- und Zuordnungsinhalt.

  5. Stellen Sie sicher, dass von Visual Studio keine Objektebene generiert wird.

Bb738625.note(de-de,VS.100).gifHinweis:
Mit den Entity Data Model -Tools können auch Skripts generiert werden, die auf Grundlage des Speicherschemadefinitionsinhalts (SSDL) eine neue Datenbank erstellen.In diesem Fall können Sie ein Datenmodell erstellen, das mit den benutzerdefinierten Datenklassen übereinstimmt und anschließend auf Grundlage der EDMX-Datei eine neue Datenbank erstellen.Weitere Informationen finden Sie unter How to: Create a Database from a Conceptual Model.

Dieses Thema zeigt, wie das Modell mit dem ADO.NET Entity Data Model Designer (Entity Designer)- oder dem EDM-Generator (EdmGen.exe)-Hilfsprogramm aktualisiert wird. Das Modell muss bereits generiert worden sein, um die Beispiele in diesem Thema auszuführen. Das Modell in diesem Beispiel basiert auf den Contact-, SalesOrderHeader- und SalesOrderDetail-Tabellen in der AdventureWorks-Datenbank. Informationen zum Erstellen von Bedingungsausdrücken finden Sie unter Gewusst wie: Verwenden des Entity Data Model-Assistenten (Entity Framework) oder Gewusst wie: Generieren von Modell- und Zuordnungsdateien mithilfe von EdmGen.exe. Sie müssen ebenfalls benutzerdefinierte Contact-, Orders- und LineItem-Datenklassen hinzufügen, die den Contact-, SalesOrderHeader- und SalesOrderDetail-Tabellen des Projekts zugeordnet werden. Informationen zur Definition der benutzerdefinierten Contact-, Orders- und LineItem-Datenklassen finden Sie unter Gewusst wie: Definieren von POCO-Entitäten (Entity Framework).

In den folgenden Prozeduren wird davon ausgegangen, dass die EDMX-Datei im Entity Designer geöffnen ist.

Ändern Sie das Modell mit dem Entity Data Model-Designer.

  1. Ändern Sie die Namen des EntityType-Elements und des EntitySet-Elements, damit sie mit den Namen der benutzerdefinierten Datenklassen übereinstimmen.

    • Wählen Sie die Contact-Entität aus. Legen Sie im Fenster Eigenschaften die Eigenschaft Entitätssatzname auf ContactSet fest.

    • Wählen Sie die SalesOrderHeader-Entität aus. Legen Sie im Fenster Eigenschaften die Eigenschaft Name auf Order und die Eigenschaft Entitätssatzname auf OrderSet fest.

    • Wählen Sie SalesOrderDetails aus. Legen Sie im Fenster Eigenschaften die Eigenschaft Name auf LineItem und die Eigenschaft Entity Set Name auf LineItemSet fest.

  2. Ändern Sie den Namen der Navigationseigenschaften.

    • Wählen Sie die SalesOrderHeaders-Navigationseigenschaft der Contact-Entität aus. Legen Sie im Fenster Eigenschaften die Eigenschaft Name auf Orders fest.

    • Wählen Sie die SalesOrderDetails-Navigationseigenschaft der SalesOrderHeader-Entität aus. Legen Sie im Fenster Eigenschaften die Eigenschaft Name auf LineItems fest.

    • Wählen Sie die SalesOrderHeader-Navigationseigenschaft der SalesOrderDetail-Entität aus. Legen Sie im Fenster Eigenschaften die Eigenschaft Name auf Order fest.

  3. Ändern Sie die Zuordnung.

    • Wählen Sie die Zuordnung für Client- und Order-Entitätstypen aus, und passen Sie die folgenden Eigenschaften so an, dass sie mit den folgenden Werte im Fenster Eigenschaften übereinstimmen:

      Zuordnungssatzname: Order_ Contact_ ContactIDSet

      End1-Navigationseigenschaft: Orders

      End1-Rollenname: Contact

      End2-Navigationseigenschaft: Contact

      End2-Rollenname: Order

      Name: Order_Contact_ContactID

    • Wählen Sie die Zuordnung für Order- und LineItem-Entitätstypen aus, und passen Sie die folgenden Eigenschaften so an, dass sie mit den folgenden Werten im Fenster Eigenschaften übereinstimmen:

      Zuordnungssatzname: LineItem_Order_SalesOrderIDSet

      End1-Navigationseigenschaft: LineItems

      End1-Rollenname: Order

      End2-Navigationseigenschaft: Order

      End2-Rollenname: LineItem

      Name: LineItem_Order_SalesOrderID

  4. Erstellen Sie einen komplexen Typ aus den Eigenschaften des Order-Entitätstyps.

    • Wählen Sie die folgenden Eigenschaften der Order-Entität aus: AccountNumber, Kommentar, PurchaseOrderNumber und SalesOrderNumber. Klicken Sie dann mit der rechten Maustaste, und wählen Sie die Option zum Erstellen eines komplexen Typs aus.

      Ein neuer komplexer Typ mit den ausgewählten Eigenschaften wird dem Modellbrowser hinzugefügt. Der SalesOrderHeader-Entität wird ein neuer komplexer Typ hinzugefügt. Dem komplexen Typ und der Eigenschaft für den komplexen Typ werden Standardnamen zugewiesen.

    • Benennen Sie den komplexen Typ in OrderInfo um.

    • Benennen Sie die Eigenschaft für den komplexen Typ in ExtendedInfo um.

  5. Speichern Sie die Änderungen in der EDMX-Datei.

  6. Deaktivieren Sie die Codegenerierung für die EDMX-Datei. Öffnen Sie die EDMX-Datei in ADO.NET Entity Data Model Designer (Entity Designer). Klicken Sie mit der rechten Maustaste auf die Designeroberfläche, und wählen Sie Eigenschaften aus. Wählen Sie im Fenster Eigenschaften die Eigenschaft Codegenerierungsstrategie aus, und wählen Sie None aus. Wenn das Fenster Eigenschaften nicht angezeigt wird, drücken Sie F4.

Ändern Sie das Modell mit EdmGen.exe.

  1. Öffnen Sie die CSDL-Datei in Visual Studio oder in einem Texteditor.

    • Ändern Sie die Namen des EntityType-Elements und des EntitySet-Elements, damit sie mit den Namen der benutzerdefinierten Datenklassen übereinstimmen.

    • Ändern Sie die Namen der Property-Elemente für jeden Typ, damit sie mit den Namen der Eigenschaften in der benutzerdefinierten Datenklasse übereinstimmen.

    • Entfernen Sie die Property-Elemente für alle Eigenschaften, die in der benutzerdefinierten Datenklasse nicht vorhanden sind.

    • Ändern Sie den Namen des NavigationProperty-Elements, damit er mit dem Namen der Navigationseigenschaft in der benutzerdefinierten Datenklasse übereinstimmt. Stellen Sie sicher, dass FromRole und ToRole auf die richtigen Entitätstypen ausgerichtet sind.

    • Speichern Sie die Änderungen in der CSDL-Datei.

  2. Öffnen Sie die MSL-Datei in Visual Studio oder in einem Texteditor.

    • Ändern Sie die Namen des EntitySetMapping-Elements und des TypeName-Attributs, damit sie mit den Namen der benutzerdefinierten Klassen übereinstimmen.

    • Entfernen Sie das EntitySetMapping-Element für jede Entität, die nicht über eine entsprechende benutzerdefinierte Datenklasse verfügt.

    • Ändern Sie die Namen der ScalarProperty-Elemente für jeden Typ, damit sie mit den Namen der Eigenschaften in der benutzerdefinierten Datenklasse übereinstimmen.

    • Entfernen Sie das ScalarProperty-Element für alle Eigenschaften, die in der benutzerdefinierten Datenklasse nicht vorhanden sind.

    • Speichern Sie die Änderungen in der MSL-Datei.

  3. Öffnen Sie die SSDL-Datei in Visual Studio oder in einem Texteditor.

    • Entfernen Sie die EntityType-Elemente für alle Entitäten, die den benutzerdefinierten Datenklassen nicht zugeordnet sind.

    • Entfernen Sie die ScalarProperty-Elemente für alle Eigenschaften, die den Eigenschaften der benutzerdefinierten Datenklassen nicht zugeordnet sind.

    • Speichern Sie die Änderungen in der SSDL-Datei.

  4. Prüfen Sie die aktualisierten Zuordnungsdateien, indem Sie das Hilfsprogramm EdmGen.exe in dem Verzeichnis ausführen, das die Zuordnungsdateien enthält.

    • Verwenden Sie den folgenden Befehl:

      %windir%\Microsoft.NET\Framework\v4\edmgen.exe /mode:ValidateArtifacts  
      /inssdl:.  \YourModel.ssdl /inmsl:.  \YourModel.msl /incsdl:.  \YourModel.csdl  
      
    Bb738625.note(de-de,VS.100).gifHinweis:
    Entfernen Sie Zeilenumbrüche, und ersetzen Sie YourModel durch den für die Zuordnungsdateien verwendeten Namen.

    • Überprüfen Sie die Ausgabe, und beheben Sie Validierungsfehler.
  5. Erneutes Erstellen, Speichern und Entfernen von automatisch generiertem Objektcode

    • Klicken Sie im Projektmappen-Explorer in Visual Studio mit der rechten Maustaste auf die CSDL-Datei, und wählen Sie Benutzerdefiniertes Tool ausführen aus.**

    • Hierdurch wird die Objektebene auf der Grundlage der geänderten CSDL-Datei erneut erstellt.

    • Erweitern Sie den CSDL-Dateiknoten, öffnen Sie die Designerdatei, und speichern Sie die Datei unter einem anderen Dateinamen.

      Hierdurch wird die automatisch generierte Objektebenendatei gespeichert. Im Thema Gewusst wie: Definieren eines benutzerdefinierten Objektkontexts (Entity Framework) wird Code aus dieser Datei verwendet.

    • Schließen Sie die Designerdatei vom Projekt aus.

    • Wählen Sie die CSDL-Datei aus, und löschen Sie im Fenster Eigenschaften den Wert für das benutzerdefinierte Tool.

      Hierdurch wird das erneute Erstellen der Objektebenendatei verhindert. Wenn diese Datei künftig erstellt werden soll, geben Sie im Fenster Eigenschaften für Benutzerdefiniertes Tool den Wert EntityModelCodeGenerator ein, und wiederholen Sie Schritt 1.

Beispiel

Die folgende CSDL-Datei wurde so angepasst, dass die benutzerdefinierten Datenklassen Contact, Orders und LineItem unterstützt werden.

<Schema Namespace="AdventureWorksModel" Alias="Self" xmlns:annotation="https://schemas.microsoft.com/ado/2009/02/edm/annotation" xmlns="https://schemas.microsoft.com/ado/2008/09/edm">
  <EntityContainer Name="AdventureWorksEntities" annotation:LazyLoadingEnabled="true">
    <EntitySet Name="LineItemSet" EntityType="AdventureWorksModel.LineItem" />
    <EntitySet Name="OrderSet" EntityType="AdventureWorksModel.Order" />
    <AssociationSet Name="LineItem_Order_SalesOrderIDSet" Association="AdventureWorksModel.LineItem_Order_SalesOrderID">
      <End Role="Order" EntitySet="OrderSet" />
      <End Role="LineItem" EntitySet="LineItemSet" />
    </AssociationSet>
  <EntitySet Name="ContactSet" EntityType="AdventureWorksModel.Contact" />
  <AssociationSet Name="Order_Contact_ContactID" Association="AdventureWorksModel.Order_Contact_ContactID">
  <End Role="Contact" EntitySet="ContactSet" />
  <End Role="Order" EntitySet="OrderSet" /></AssociationSet>
  </EntityContainer>
  <EntityType Name="LineItem">
    <Key>
      <PropertyRef Name="SalesOrderID" />
      <PropertyRef Name="SalesOrderDetailID" />
    </Key>
    <Property Name="SalesOrderID" Type="Int32" Nullable="false" />
    <Property Name="SalesOrderDetailID" Type="Int32" Nullable="false" annotation:StoreGeneratedPattern="Identity" />
    <Property Name="CarrierTrackingNumber" Type="String" MaxLength="25" Unicode="true" FixedLength="false" />
    <Property Name="OrderQty" Type="Int16" Nullable="false" />
    <Property Name="ProductID" Type="Int32" Nullable="false" />
    <Property Name="SpecialOfferID" Type="Int32" Nullable="false" />
    <Property Name="UnitPrice" Type="Decimal" Nullable="false" Precision="19" Scale="4" />
    <Property Name="UnitPriceDiscount" Type="Decimal" Nullable="false" Precision="19" Scale="4" />
    <Property Name="LineTotal" Type="Decimal" Nullable="false" Precision="38" Scale="6" annotation:StoreGeneratedPattern="Computed" />
    <Property Name="rowguid" Type="Guid" Nullable="false" />
    <Property Name="ModifiedDate" Type="DateTime" Nullable="false" />
    <NavigationProperty Name="Order" Relationship="AdventureWorksModel.LineItem_Order_SalesOrderID" FromRole="LineItem" ToRole="Order" />
  </EntityType>
  <EntityType Name="Order">
    <Key>
      <PropertyRef Name="SalesOrderID" />
    </Key>
    <Property Name="SalesOrderID" Type="Int32" Nullable="false" annotation:StoreGeneratedPattern="Identity" />
    <Property Name="RevisionNumber" Type="Byte" Nullable="false" />
    <Property Name="OrderDate" Type="DateTime" Nullable="false" />
    <Property Name="DueDate" Type="DateTime" Nullable="false" />
    <Property Name="ShipDate" Type="DateTime" />
    <Property Name="Status" Type="Byte" Nullable="false" />
    <Property Name="OnlineOrderFlag" Type="Boolean" Nullable="false" />
    <Property Name="CustomerID" Type="Int32" Nullable="false" />
    <Property Name="ContactID" Type="Int32" Nullable="false" />
    <Property Name="SalesPersonID" Type="Int32" />
    <Property Name="TerritoryID" Type="Int32" />
    <Property Name="BillToAddressID" Type="Int32" Nullable="false" />
    <Property Name="ShipToAddressID" Type="Int32" Nullable="false" />
    <Property Name="ShipMethodID" Type="Int32" Nullable="false" />
    <Property Name="CreditCardID" Type="Int32" />
    <Property Name="CreditCardApprovalCode" Type="String" MaxLength="15" Unicode="false" FixedLength="false" />
    <Property Name="CurrencyRateID" Type="Int32" />
    <Property Name="SubTotal" Type="Decimal" Nullable="false" Precision="19" Scale="4" />
    <Property Name="TaxAmt" Type="Decimal" Nullable="false" Precision="19" Scale="4" />
    <Property Name="Freight" Type="Decimal" Nullable="false" Precision="19" Scale="4" />
    <Property Name="TotalDue" Type="Decimal" Nullable="false" Precision="19" Scale="4" annotation:StoreGeneratedPattern="Computed" />
    <Property Name="rowguid" Type="Guid" Nullable="false" />
    <Property Name="ModifiedDate" Type="DateTime" Nullable="false" />
    <NavigationProperty Name="LineItems" Relationship="AdventureWorksModel.LineItem_Order_SalesOrderID" FromRole="Order" ToRole="LineItem" />
    <Property Name="ExtendedInfo" Type="AdventureWorksModel.OrderInfo" Nullable="false" />
    <NavigationProperty Name="Contact" Relationship="AdventureWorksModel.Order_Contact_ContactID" FromRole="Order" ToRole="Contact" />
    </EntityType>
  <Association Name="LineItem_Order_SalesOrderID">
    <End Role="Order" Type="AdventureWorksModel.Order" Multiplicity="1">
      <OnDelete Action="Cascade" />
    </End>
    <End Role="LineItem" Type="AdventureWorksModel.LineItem" Multiplicity="*" />
    <ReferentialConstraint>
      <Principal Role="Order">
        <PropertyRef Name="SalesOrderID" />
      </Principal>
      <Dependent Role="LineItem">
        <PropertyRef Name="SalesOrderID" />
      </Dependent>
    </ReferentialConstraint>
  </Association>
  <ComplexType Name="OrderInfo">
  <Property Type="String" Name="Comment" MaxLength="128" FixedLength="false" Unicode="true" />
  <Property Type="String" Name="AccountNumber" MaxLength="15" FixedLength="false" Unicode="true" />
  <Property Type="String" Name="PurchaseOrderNumber" MaxLength="25" FixedLength="false" Unicode="true" />
  <Property Type="String" Name="SalesOrderNumber" Nullable="false" MaxLength="25" FixedLength="false" Unicode="true" /></ComplexType>
  <EntityType Name="Contact">
  <Key>
  <PropertyRef Name="ContactID" /></Key>
  <Property Type="Int32" Name="ContactID" Nullable="false" annotation:StoreGeneratedPattern="Identity" />
  <Property Type="Boolean" Name="NameStyle" Nullable="false" />
  <Property Type="String" Name="Title" MaxLength="8" FixedLength="false" Unicode="true" />
  <Property Type="String" Name="FirstName" Nullable="false" MaxLength="50" FixedLength="false" Unicode="true" />
  <Property Type="String" Name="MiddleName" MaxLength="50" FixedLength="false" Unicode="true" />
  <Property Type="String" Name="LastName" Nullable="false" MaxLength="50" FixedLength="false" Unicode="true" />
  <Property Type="String" Name="Suffix" MaxLength="10" FixedLength="false" Unicode="true" />
  <Property Type="String" Name="EmailAddress" MaxLength="50" FixedLength="false" Unicode="true" />
  <Property Type="Int32" Name="EmailPromotion" Nullable="false" />
  <Property Type="String" Name="Phone" MaxLength="25" FixedLength="false" Unicode="true" />
  <Property Type="String" Name="PasswordHash" Nullable="false" MaxLength="128" FixedLength="false" Unicode="false" />
  <Property Type="String" Name="PasswordSalt" Nullable="false" MaxLength="10" FixedLength="false" Unicode="false" />
  <Property Type="String" Name="AdditionalContactInfo" MaxLength="Max" FixedLength="false" Unicode="true" />
  <Property Type="Guid" Name="rowguid" Nullable="false" />
  <Property Type="DateTime" Name="ModifiedDate" Nullable="false" />
  <NavigationProperty Name="Orders" Relationship="AdventureWorksModel.Order_Contact_ContactID" FromRole="Contact" ToRole="Order" /></EntityType>
  <Association Name="Order_Contact_ContactID">
  <End Type="AdventureWorksModel.Contact" Role="Contact" Multiplicity="1" />
  <End Type="AdventureWorksModel.Order" Role="Order" Multiplicity="*" />
  <ReferentialConstraint>
  <Principal Role="Contact">
  <PropertyRef Name="ContactID" /></Principal>
  <Dependent Role="Order">
  <PropertyRef Name="ContactID" /></Dependent></ReferentialConstraint></Association>
  </Schema>

Die folgende MSL-Datei wurde so angepasst, dass die benutzerdefinierten Datenklassen Contact, Orders und LineItem den Tabellen Contact, SalesOrderHeader und SalesOrderDetail in der AdventureWorks-Datenbank zugeordnet werden.

<Mapping Space="C-S" xmlns="https://schemas.microsoft.com/ado/2008/09/mapping/cs">
  <EntityContainerMapping StorageEntityContainer="AdventureWorksModelStoreContainer" CdmEntityContainer="AdventureWorksEntities">
    <EntitySetMapping Name="LineItemSet">
      <EntityTypeMapping TypeName="AdventureWorksModel.LineItem">
        <MappingFragment StoreEntitySet="SalesOrderDetail">
          <ScalarProperty Name="SalesOrderID" ColumnName="SalesOrderID" />
          <ScalarProperty Name="SalesOrderDetailID" ColumnName="SalesOrderDetailID" />
          <ScalarProperty Name="CarrierTrackingNumber" ColumnName="CarrierTrackingNumber" />
          <ScalarProperty Name="OrderQty" ColumnName="OrderQty" />
          <ScalarProperty Name="ProductID" ColumnName="ProductID" />
          <ScalarProperty Name="SpecialOfferID" ColumnName="SpecialOfferID" />
          <ScalarProperty Name="UnitPrice" ColumnName="UnitPrice" />
          <ScalarProperty Name="UnitPriceDiscount" ColumnName="UnitPriceDiscount" />
          <ScalarProperty Name="LineTotal" ColumnName="LineTotal" />
          <ScalarProperty Name="rowguid" ColumnName="rowguid" />
          <ScalarProperty Name="ModifiedDate" ColumnName="ModifiedDate" />
        </MappingFragment>
      </EntityTypeMapping>
    </EntitySetMapping>
    <EntitySetMapping Name="OrderSet">
      <EntityTypeMapping TypeName="AdventureWorksModel.Order">
        <MappingFragment StoreEntitySet="SalesOrderHeader">
          <ScalarProperty Name="SalesOrderID" ColumnName="SalesOrderID" />
          <ScalarProperty Name="RevisionNumber" ColumnName="RevisionNumber" />
          <ScalarProperty Name="OrderDate" ColumnName="OrderDate" />
          <ScalarProperty Name="DueDate" ColumnName="DueDate" />
          <ScalarProperty Name="ShipDate" ColumnName="ShipDate" />
          <ScalarProperty Name="Status" ColumnName="Status" />
          <ScalarProperty Name="OnlineOrderFlag" ColumnName="OnlineOrderFlag" />
          <ScalarProperty Name="CustomerID" ColumnName="CustomerID" />
          <ScalarProperty Name="ContactID" ColumnName="ContactID" />
          <ScalarProperty Name="SalesPersonID" ColumnName="SalesPersonID" />
          <ScalarProperty Name="TerritoryID" ColumnName="TerritoryID" />
          <ScalarProperty Name="BillToAddressID" ColumnName="BillToAddressID" />
          <ScalarProperty Name="ShipToAddressID" ColumnName="ShipToAddressID" />
          <ScalarProperty Name="ShipMethodID" ColumnName="ShipMethodID" />
          <ScalarProperty Name="CreditCardID" ColumnName="CreditCardID" />
          <ScalarProperty Name="CreditCardApprovalCode" ColumnName="CreditCardApprovalCode" />
          <ScalarProperty Name="CurrencyRateID" ColumnName="CurrencyRateID" />
          <ScalarProperty Name="SubTotal" ColumnName="SubTotal" />
          <ScalarProperty Name="TaxAmt" ColumnName="TaxAmt" />
          <ScalarProperty Name="Freight" ColumnName="Freight" />
          <ScalarProperty Name="TotalDue" ColumnName="TotalDue" />
          <ScalarProperty Name="rowguid" ColumnName="rowguid" />
          <ScalarProperty Name="ModifiedDate" ColumnName="ModifiedDate" />
          <ComplexProperty Name="ExtendedInfo">
            <ScalarProperty Name="SalesOrderNumber" ColumnName="SalesOrderNumber" />
            <ScalarProperty Name="PurchaseOrderNumber" ColumnName="PurchaseOrderNumber" />
            <ScalarProperty Name="AccountNumber" ColumnName="AccountNumber" />
            <ScalarProperty Name="Comment" ColumnName="Comment" />
          </ComplexProperty>
        </MappingFragment>
      </EntityTypeMapping>
    </EntitySetMapping>
      <EntitySetMapping Name="ContactSet">
      <EntityTypeMapping TypeName="AdventureWorksModel.Contact">
      <MappingFragment StoreEntitySet="Contact">
      <ScalarProperty Name="ModifiedDate" ColumnName="ModifiedDate" />
      <ScalarProperty Name="rowguid" ColumnName="rowguid" />
      <ScalarProperty Name="AdditionalContactInfo" ColumnName="AdditionalContactInfo" />
      <ScalarProperty Name="PasswordSalt" ColumnName="PasswordSalt" />
      <ScalarProperty Name="PasswordHash" ColumnName="PasswordHash" />
      <ScalarProperty Name="Phone" ColumnName="Phone" />
      <ScalarProperty Name="EmailPromotion" ColumnName="EmailPromotion" />
      <ScalarProperty Name="EmailAddress" ColumnName="EmailAddress" />
      <ScalarProperty Name="Suffix" ColumnName="Suffix" />
      <ScalarProperty Name="LastName" ColumnName="LastName" />
      <ScalarProperty Name="MiddleName" ColumnName="MiddleName" />
      <ScalarProperty Name="FirstName" ColumnName="FirstName" />
      <ScalarProperty Name="Title" ColumnName="Title" />
      <ScalarProperty Name="NameStyle" ColumnName="NameStyle" />
      <ScalarProperty Name="ContactID" ColumnName="ContactID" /></MappingFragment></EntityTypeMapping></EntitySetMapping>
  </EntityContainerMapping>
</Mapping>

Die folgende SSDL-Datei wurde so angepasst, dass die benutzerdefinierten Datenklassen Contact, Orders und LineItem unter Verwendung der Contact-, SalesOrderHeader und SalesOrderDetail-Tabellen in der AdventureWorks-Datenbank unterstützt werden.

<Schema Namespace="AdventureWorksModel.Store" Alias="Self" Provider="System.Data.SqlClient" ProviderManifestToken="2008" xmlns:store="https://schemas.microsoft.com/ado/2007/12/edm/EntityStoreSchemaGenerator" xmlns="https://schemas.microsoft.com/ado/2009/02/edm/ssdl">
    <EntityContainer Name="AdventureWorksModelStoreContainer">
      <EntitySet Name="Contact" EntityType="AdventureWorksModel.Store.Contact" store:Type="Tables" Schema="Person" />
      <EntitySet Name="SalesOrderDetail" EntityType="AdventureWorksModel.Store.SalesOrderDetail" store:Type="Tables" Schema="Sales" />
      <EntitySet Name="SalesOrderHeader" EntityType="AdventureWorksModel.Store.SalesOrderHeader" store:Type="Tables" Schema="Sales" />
      <AssociationSet Name="FK_SalesOrderDetail_SalesOrderHeader_SalesOrderID" Association="AdventureWorksModel.Store.FK_SalesOrderDetail_SalesOrderHeader_SalesOrderID">
        <End Role="SalesOrderHeader" EntitySet="SalesOrderHeader" />
        <End Role="SalesOrderDetail" EntitySet="SalesOrderDetail" />
      </AssociationSet>
      <AssociationSet Name="FK_SalesOrderHeader_Contact_ContactID" Association="AdventureWorksModel.Store.FK_SalesOrderHeader_Contact_ContactID">
        <End Role="Contact" EntitySet="Contact" />
        <End Role="SalesOrderHeader" EntitySet="SalesOrderHeader" />
      </AssociationSet>
    </EntityContainer>
    <EntityType Name="Contact">
      <Key>
        <PropertyRef Name="ContactID" />
      </Key>
      <Property Name="ContactID" Type="int" Nullable="false" StoreGeneratedPattern="Identity" />
      <Property Name="NameStyle" Type="bit" Nullable="false" />
      <Property Name="Title" Type="nvarchar" MaxLength="8" />
      <Property Name="FirstName" Type="nvarchar" Nullable="false" MaxLength="50" />
      <Property Name="MiddleName" Type="nvarchar" MaxLength="50" />
      <Property Name="LastName" Type="nvarchar" Nullable="false" MaxLength="50" />
      <Property Name="Suffix" Type="nvarchar" MaxLength="10" />
      <Property Name="EmailAddress" Type="nvarchar" MaxLength="50" />
      <Property Name="EmailPromotion" Type="int" Nullable="false" />
      <Property Name="Phone" Type="nvarchar" MaxLength="25" />
      <Property Name="PasswordHash" Type="varchar" Nullable="false" MaxLength="128" />
      <Property Name="PasswordSalt" Type="varchar" Nullable="false" MaxLength="10" />
      <Property Name="AdditionalContactInfo" Type="xml" />
      <Property Name="rowguid" Type="uniqueidentifier" Nullable="false" />
      <Property Name="ModifiedDate" Type="datetime" Nullable="false" />
    </EntityType>
    <EntityType Name="SalesOrderDetail">
      <Key>
        <PropertyRef Name="SalesOrderID" />
        <PropertyRef Name="SalesOrderDetailID" />
      </Key>
      <Property Name="SalesOrderID" Type="int" Nullable="false" />
      <Property Name="SalesOrderDetailID" Type="int" Nullable="false" StoreGeneratedPattern="Identity" />
      <Property Name="CarrierTrackingNumber" Type="nvarchar" MaxLength="25" />
      <Property Name="OrderQty" Type="smallint" Nullable="false" />
      <Property Name="ProductID" Type="int" Nullable="false" />
      <Property Name="SpecialOfferID" Type="int" Nullable="false" />
      <Property Name="UnitPrice" Type="money" Nullable="false" />
      <Property Name="UnitPriceDiscount" Type="money" Nullable="false" />
      <Property Name="LineTotal" Type="numeric" Nullable="false" Precision="38" Scale="6" StoreGeneratedPattern="Computed" />
      <Property Name="rowguid" Type="uniqueidentifier" Nullable="false" />
      <Property Name="ModifiedDate" Type="datetime" Nullable="false" />
    </EntityType>
    <EntityType Name="SalesOrderHeader">
      <Key>
        <PropertyRef Name="SalesOrderID" />
      </Key>
      <Property Name="SalesOrderID" Type="int" Nullable="false" StoreGeneratedPattern="Identity" />
      <Property Name="RevisionNumber" Type="tinyint" Nullable="false" />
      <Property Name="OrderDate" Type="datetime" Nullable="false" />
      <Property Name="DueDate" Type="datetime" Nullable="false" />
      <Property Name="ShipDate" Type="datetime" />
      <Property Name="Status" Type="tinyint" Nullable="false" />
      <Property Name="OnlineOrderFlag" Type="bit" Nullable="false" />
      <Property Name="SalesOrderNumber" Type="nvarchar" Nullable="false" MaxLength="25" StoreGeneratedPattern="Computed" />
      <Property Name="PurchaseOrderNumber" Type="nvarchar" MaxLength="25" />
      <Property Name="AccountNumber" Type="nvarchar" MaxLength="15" />
      <Property Name="CustomerID" Type="int" Nullable="false" />
      <Property Name="ContactID" Type="int" Nullable="false" />
      <Property Name="SalesPersonID" Type="int" />
      <Property Name="TerritoryID" Type="int" />
      <Property Name="BillToAddressID" Type="int" Nullable="false" />
      <Property Name="ShipToAddressID" Type="int" Nullable="false" />
      <Property Name="ShipMethodID" Type="int" Nullable="false" />
      <Property Name="CreditCardID" Type="int" />
      <Property Name="CreditCardApprovalCode" Type="varchar" MaxLength="15" />
      <Property Name="CurrencyRateID" Type="int" />
      <Property Name="SubTotal" Type="money" Nullable="false" />
      <Property Name="TaxAmt" Type="money" Nullable="false" />
      <Property Name="Freight" Type="money" Nullable="false" />
      <Property Name="TotalDue" Type="money" Nullable="false" StoreGeneratedPattern="Computed" />
      <Property Name="Comment" Type="nvarchar" MaxLength="128" />
      <Property Name="rowguid" Type="uniqueidentifier" Nullable="false" />
      <Property Name="ModifiedDate" Type="datetime" Nullable="false" />
    </EntityType>
    <Association Name="FK_SalesOrderDetail_SalesOrderHeader_SalesOrderID">
      <End Role="SalesOrderHeader" Type="AdventureWorksModel.Store.SalesOrderHeader" Multiplicity="1">
        <OnDelete Action="Cascade" />
      </End>
      <End Role="SalesOrderDetail" Type="AdventureWorksModel.Store.SalesOrderDetail" Multiplicity="*" />
      <ReferentialConstraint>
        <Principal Role="SalesOrderHeader">
          <PropertyRef Name="SalesOrderID" />
        </Principal>
        <Dependent Role="SalesOrderDetail">
          <PropertyRef Name="SalesOrderID" />
        </Dependent>
      </ReferentialConstraint>
    </Association>
    <Association Name="FK_SalesOrderHeader_Contact_ContactID">
      <End Role="Contact" Type="AdventureWorksModel.Store.Contact" Multiplicity="1" />
      <End Role="SalesOrderHeader" Type="AdventureWorksModel.Store.SalesOrderHeader" Multiplicity="*" />
      <ReferentialConstraint>
        <Principal Role="Contact">
          <PropertyRef Name="ContactID" />
        </Principal>
        <Dependent Role="SalesOrderHeader">
          <PropertyRef Name="ContactID" />
        </Dependent>
      </ReferentialConstraint>
    </Association>
  </Schema>

Siehe auch

Konzepte

Anpassen von Objekten (Entity Framework)

Weitere Ressourcen

CSDL-, SSDL- und MSL-Spezifikationen