Partager via


Procédure : personnaliser des fichiers de modèle et de mappage pour utiliser des objets personnalisés (Entity Framework)

Pour utiliser des classes de données personnalisées avec Entity Framework , vous devez mettre en correspondance les types d'entités et les propriétés définies dans le modèle conceptuel avec les classes de données personnalisées. Lorsque vous utilisez les outils Entity Data Model pour générer le contenu de modèle et de mappage à partir d'une base de données, les types d'entités et les jeux d'entités dans le modèle conceptuel correspondent aux tables dans la base de données. Pour mettre à jour le contenu de modèle et de mappage pour mettre en correspondance les classes de données personnalisées, vous devez procéder comme suit :

  1. Mettez à jour le contenu du modèle conceptuel, défini dans le langage CSDL (Conceptual Schema Definition Language), pour qu'il corresponde aux classes de données personnalisées.

  2. Mettez à jour le contenu du modèle de stockage, défini dans le langage SSDL (Store Schema Definition Language), si nécessaire.

  3. Mettez à jour le contenu du mappage, défini dans le langage MSL (Mapping Specification Language).

  4. Validez le contenu de modèle et de mappage mis à jour.

  5. Empêchez Visual Studio de générer la couche objet.

Bb738625.note(fr-fr,VS.100).gifRemarque :
Les outils Entity Data Model peuvent également générer des scripts qui créeront une nouvelle base de données selon le contenu SSDL.Dans ce cas, vous pouvez créer un modèle de données qui correspond à vos classes de données personnalisées, puis créer une nouvelle base de données basée sur le fichier .edmx.Pour plus d'informations, consultez How to: Create a Database from a Conceptual Model.

Cette rubrique indique comment mettre à jour le modèle à l'aide d'ADO.NET Entity Data Model Designer (Concepteur d'entités) ou de l'utilitaire EDM Generator (EdmGen.exe) Pour exécuter les exemples fournis dans cette rubrique, vous devez avoir déjà généré votre modèle. Le modèle de cet exemple est basé sur les tables Contact, SalesOrderHeader et SalesOrderDetail de la base de données AdventureWorks. Pour plus d'informations sur la manière de créer un nouveau modèle, consultez Procédure : utiliser l'Assistant Entity Data Model (Entity Framework) ou Procédure : utiliser EdmGen.exe pour générer les fichiers de modèle et de mappage (Entity Framework). Vous devez également ajouter à votre projet les classes de données personnalisées Contact, Orders et LineItem, qui sont mappées aux tables Contact, SalesOrderHeader et SalesOrderDetail. Pour définir les classes de données personnalisées Contact, Orders et LineItem, consultez Procédure : définir des entités POCO (Entity Framework).

Les procédures suivantes supposent que vous avez ouvert le fichier .edmx dans le Concepteur d'entités.

Modifiez le modèle à l'aide d'Entity Data Model Designer.

  1. Renommez les éléments EntityType et EntitySet pour refléter les noms des classes de données personnalisées.

    • Sélectionnez l'entité Contact. Dans la fenêtre Propriétés, définissez Nom du jeu d'entités sur ContactSet.

    • Sélectionnez l'entité SalesOrderHeader. Dans la fenêtre Propriétés, définissez Nom sur Order et Nom du jeu d'entités sur OrderSet.

    • Sélectionnez SalesOrderDetails. Dans la fenêtre Propriétés, définissez Nom sur LineItem et Entity Set Name sur LineItemSet.

  2. Modifiez le nom des propriétés de navigation.

    • Sélectionnez la propriété de navigation SalesOrderHeaders de l'entité Contact. Dans la fenêtre Propriétés, définissez Nom sur Orders.

    • Sélectionnez la propriété de navigation SalesOrderDetails de l'entité SalesOrderHeader. Dans la fenêtre Propriétés, définissez Nom sur LineItems.

    • Sélectionnez la propriété de navigation SalesOrderHeader de l'entité SalesOrderDetail. Dans la fenêtre Propriétés, définissez Nom sur Order.

  3. Modifiez l'association.

    • Sélectionnez l'association entre les types d'entités Client et Order et attribuez les valeurs suivantes aux propriétés ci-dessous dans la fenêtre Propriétés :

      Nom de l'ensemble d'associations : Order_ Contact_ ContactIDSet

      Propriété de navigation terminaison1 : Orders

      Nom du rôle terminaison1 : Contact

      Propriété de navigation terminaison2 : Contact

      Nom du rôle terminaison2 : Order

      Nom : Order_Contact_ContactID

    • Sélectionnez l'association entre les types d'entités Client et LineItem et attribuez les valeurs suivantes aux propriétés ci-dessous dans la fenêtre Propriétés :

      Nom de l'ensemble d'associations : LineItem_Order_SalesOrderIDSet

      Propriété de navigation terminaison1 : LineItems

      Nom du rôle terminaison1 : Order

      Propriété de navigation terminaison2 : Order

      Nom du rôle terminaison2 : LineItem

      Nom : LineItem_Order_SalesOrderID

  4. Créez un type complexe à partir des propriétés du type d'entité Order.

    • Sélectionnez les propriétés suivantes de l'entité Order : AccountNumber, Comment, PurchaseOrderNumber et SalesOrderNumber, puis cliquez avec le bouton droit et sélectionnez Créer un type complexe.

      Un nouveau type complexe avec les propriétés sélectionnées est ajouté à l'Explorateur de modèles. Une nouvelle propriété de type complexe est ajoutée à l'entité SalesOrderHeader. Des noms par défaut sont attribués au type complexe et à la propriété de type complexe.

    • Renommez le type complexe OrderInfo.

    • Renommez la propriété de type complexe ExtendedInfo.

  5. Enregistrez les modifications dans le fichier .edmx.

  6. Désactivez la génération de code pour le fichier .edmx. Ouvrez le fichier .edmx dans ADO.NET Entity Data Model Designer (Concepteur d'entités). Cliquez avec le bouton droit sur l'aire du concepteur, puis sélectionnez Propriétés. Dans la fenêtre Propriétés, sélectionnez la propriété Stratégie de génération de code et sélectionnez None. Si la fenêtre Propriétés n'est pas visible, appuyez sur F4.

Modifiez le modèle à l'aide d'EdmGen.exe.

  1. Ouvrez le fichier CSDL dans Visual Studio ou dans un éditeur de texte.

    • Renommez les éléments EntityType et EntitySet pour refléter les noms des classes de données personnalisées.

    • Renommez les éléments Property de chaque type pour qu'ils correspondent au nom des propriétés de la classe de données personnalisée.

    • Supprimez les éléments Property pour toutes les propriétés qui n'existent pas dans la classe de données personnalisée.

    • Renommez l'élément NavigationProperty pour qu'il corresponde au nom de la propriété de navigation dans la classe de données personnalisée. Assurez-vous que FromRole et ToRole pointent sur les types d'entités corrects.

    • Enregistrez les modifications dans le fichier .csdl.

  2. Ouvrez le fichier MSL dans Visual Studio ou dans un éditeur de texte.

    • Renommez l'élément EntitySetMapping et l'attribut TypeName pour refléter les noms des classes de données personnalisées.

    • Supprimez l'élément EntitySetMapping pour toutes les entités qui n'ont pas de classe de données personnalisée correspondante.

    • Renommez les éléments ScalarProperty de chaque type pour qu'ils correspondent aux noms des propriétés de la classe de données personnalisée.

    • Supprimez l'élément ScalarProperty pour toutes les propriétés qui n'existent pas dans la classe de données personnalisée.

    • Enregistrez les modifications dans le fichier .msl.

  3. Ouvrez le fichier SSDL dans Visual Studio ou dans un éditeur de texte.

    • Supprimez les éléments EntityType pour toutes les entités qui ne sont pas mappées aux classes de données personnalisées.

    • Supprimez les éléments ScalarProperty pour toutes les propriétés qui ne sont pas mappées aux propriétés des classes de données personnalisées.

    • Enregistrez les modifications dans le fichier .ssdl.

  4. Validez les fichiers de mappage mis à jour en exécutant l'utilitaire EdmGen.exe dans le répertoire qui contient les fichiers de mappage.

    • Utilisez la commande suivante :

      %windir%\Microsoft.NET\Framework\v4\edmgen.exe /mode:ValidateArtifacts  
      /inssdl:.  \YourModel.ssdl /inmsl:.  \YourModel.msl /incsdl:.  \YourModel.csdl  
      
    Bb738625.note(fr-fr,VS.100).gifRemarque :
    Supprimez les sauts de ligne et remplacez YourModel par le nom utilisé pour vos fichiers de mappage.

    • Vérifiez la sortie et réparez toutes les erreurs de validation.
  5. Régénérez, enregistrez et supprimez le code objet généré automatiquement.

    • Dans l'Explorateur de solutions de Visual Studio, cliquez avec le bouton droit sur le fichier * *.csdl et sélectionnez Exécuter un outil personnalisé.

    • Cette opération régénère la couche objet sur la base du fichier .csdl modifié.

    • Développez le nœud de fichier .csdl, ouvrez le fichier de concepteur, puis enregistrez le fichier sous un autre nom.

      Cette opération enregistre le fichier de couche objet généré automatiquement. Le code de ce fichier est utilisé dans la rubrique Procédure: définir un contexte d'objet personnalisé (Entity Framework).

    • Excluez le fichier de concepteur du projet.

    • Sélectionnez le fichier .csdl et effacez la valeur Outil personnalisé dans la fenêtre Propriétés.

      Cela empêchera la régénération du fichier de couche objet. Pour générer ce fichier à l'avenir, tapez EntityModelCodeGenerator pour Outil personnalisé dans la fenêtre Propriétés, puis répétez l'étape 1.

Exemple

Le fichier .csdl suivant a été personnalisé pour prendre en charge les classes de données personnalisées Contact, Orders et LineItem.

<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>

Le fichier .msl suivant a été personnalisé pour mapper les classes de données personnalisées Contact, Orders et LineItem aux tables Contact, SalesOrderHeader et SalesOrderDetail de la base de données AdventureWorks.

<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>

Le fichier .ssdl suivant a été personnalisé pour prendre en charge les classes de données personnalisées Contact, Orders et LineItem en utilisant les tables Contact, SalesOrderHeader et SalesOrderDetail de la base de données AdventureWorks.

<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>

Voir aussi

Concepts

Personnalisation des objets (Entity Framework)

Autres ressources

Spécifications CSDL, SSDL et MSL