カスタム オブジェクトを操作できるようにモデリング ファイルとマッピング ファイルをカスタマイズする方法 (Entity Framework)

Entity Framework でカスタム データ クラスを使用するには、概念モデルで定義されたエンティティ型とプロパティをカスタム データ クラスと一致させる必要があります。 Entity Data Model ツールを使用してデータベースからモデルとマッピングの内容を生成すると、概念モデルのエンティティ型とエンティティ セットはデータベース内のテーブルと一致します。 モデルとマッピングの内容を更新してカスタム データ クラスと一致させるには、次の手順を実行する必要があります。

  1. カスタム データ クラスと一致するように、概念スキーマ定義言語 (CSDL) で定義された概念モデルの内容を更新します。

  2. ストア スキーマ定義言語 (SSDL) で定義されたストレージ モデルの内容を必要に応じて更新します。

  3. マッピング仕様言語 (MSL) で定義されたマッピングの内容を更新します。

  4. 更新されたモデルとマッピングの内容を検証します。

  5. Visual Studio によってオブジェクト レイヤーが生成されないようにします。

Bb738625.note(ja-jp,VS.100).gif注 :
Entity Data Model ツールでは、ストレージ スキーマ定義 (SSDL) の内容に基づき新しいデータベースを作成するスクリプトを生成することもできます。その場合、カスタム データ クラスと一致するデータ モデルを作成してから、.edmx ファイルに基づき新しいデータベースを作成します。詳細については、「How to: Create a Database from a Conceptual Model」を参照してください。

このトピックでは、ADO.NET Entity Data Model Designer (エンティティ デザイナー) または EDM ジェネレーター (EdmGen.exe) ユーティリティを使用してモデルを更新する方法を説明します。 このトピックの例を実行するには、モデルが既に生成されている必要があります。 この例のモデルは、AdventureWorks データベースの ContactSalesOrderHeader、および SalesOrderDetail の各テーブルに基づいています。 新しいモデルを作成する方法については、「Entity Data Model ウィザードを使用する方法 (Entity Framework)」または「方法: EdmGen.exe を使用してモデル ファイルとマッピング ファイルを生成する」を参照してください。 また、ContactSalesOrderHeader、および SalesOrderDetail テーブルにマップする ContactOrders、および LineItem カスタム データ クラスもプロジェクトに追加する必要があります。 ContactOrders、および LineItem の各カスタム データ クラスを定義するには、「方法: POCO エンティティを定義する (Entity Framework)」を参照してください。

次の手順は、エンティティ デザイナーで .edmx ファイルが開いていることを前提としています。

Entity Data Model デザイナーを使用したモデルの変更

  1. カスタム データ クラスの名前を反映するように、EntityType 要素と EntitySet 要素の名前を変更します。

    • [Contact] エンティティをクリックします。 [プロパティ] ウィンドウで、[エンティティ セット名]ContactSet に設定します。

    • [SalesOrderHeader] エンティティをクリックします。 [プロパティ] ウィンドウで、[名前]Order に、[エンティティ セット名]OrderSet に設定します。

    • [SalesOrderDetails] をクリックします。 [プロパティ] ウィンドウで、[名前]LineItem に、[Entity Set Name] を LineItemSet に設定します。

  2. ナビゲーション プロパティの名前を変更します。

    • [Contact] エンティティの [SalesOrderHeaders] ナビゲーション プロパティをクリックします。 [プロパティ] ウィンドウで、[名前]Orders に設定します。

    • [SalesOrderHeader] エンティティの [SalesOrderDetails] ナビゲーション プロパティをクリックします。 [プロパティ] ウィンドウで、[名前]LineItems に設定します。

    • [SalesOrderDetail] エンティティの [SalesOrderHeader] ナビゲーション プロパティをクリックします。 [プロパティ] ウィンドウで、[名前]Order に設定します。

  3. アソシエーションを変更します。

    • Client エンティティ型と Order エンティティ型の間のアソシエーションを選択し、[プロパティ] ウィンドウの値と一致するように次のプロパティを変更します。

      [アソシエーション セット名]: Order_ Contact_ ContactIDSet

      [End1 のナビゲーション プロパティ]: Orders

      [End1 のロール名]: Contact

      [End2 のナビゲーション プロパティ]: Contact

      [End2 のロール名]: Order

      [名前]: Order_Contact_ContactID

    • Order エンティティ型と LineItem エンティティ型の間のアソシエーションを選択し、[プロパティ] ウィンドウの値と一致するように次のプロパティを変更します。

      [アソシエーション セット名]: LineItem_Order_SalesOrderIDSet

      [End1 のナビゲーション プロパティ]: LineItems

      [End1 のロール名]: Order

      [End2 のナビゲーション プロパティ]: Order

      [End2 のロール名]: LineItem

      [名前]: LineItem_Order_SalesOrderID

  4. Order エンティティ型のプロパティから複合型を作成します。

    • [Order] エンティティの [AccountNumber][Comment][PurchaseOrderNumber]、および [SalesOrderNumber] の各プロパティを選択して右クリックし、[複合型の作成] をクリックします。

      選択したプロパティの新しい複合型がモデル ブラウザーに追加されます。 新しい複合型プロパティが SalesOrderHeader エンティティに追加されます。 複合型および複合型プロパティには既定の名前が付けられます。

    • 複合型の名前を OrderInfo に変更します。

    • 複合型プロパティの名前を ExtendedInfo に変更します。

  5. 変更内容を .edmx ファイルに保存します。

  6. .edmx ファイルのコード生成を無効にします。 ADO.NET Entity Data Model Designer (エンティティ デザイナー) で .edmx ファイルを開きます。 デザイナー画面を右クリックして [プロパティ] をクリックします。 [プロパティ] ウィンドウで、[コード生成方法] プロパティをクリックし、None をクリックします。 [プロパティ] ウィンドウが表示されない場合は、F4 キーを押してください。

EdmGen.exe を使用したモデルの変更

  1. Visual Studio またはテキスト エディターで CSDL ファイルを開きます。

    • カスタム データ クラスの名前を反映するように、EntityType 要素と EntitySet 要素の名前を変更します。

    • カスタム データ クラスのプロパティの名前に対応するように、それぞれの型の Property 要素の名前を変更します。

    • カスタム データ クラスに存在しないすべてのプロパティの Property 要素を削除します。

    • カスタム データ クラスのナビゲーション プロパティの名前と一致するように、NavigationProperty 要素の名前を変更します。 FromRoleToRole が正しいエンティティ型を示していることを確認します。

    • 変更内容を .csdl ファイルに保存します。

  2. Visual Studio またはテキスト エディターで MSL ファイルを開きます。

    • カスタム クラスの名前を反映するように、EntitySetMapping 要素と TypeName 属性の名前を変更します。

    • 対応するカスタム データ クラスがないすべてのエンティティの EntitySetMapping 要素を削除します。

    • カスタム データ クラスのプロパティの名前に対応するように、それぞれの型の ScalarProperty 要素の名前を変更します。

    • カスタム データ クラスに存在しないすべてのプロパティの ScalarProperty 要素を削除します。

    • 変更内容を .msl ファイルに保存します。

  3. Visual Studio またはテキスト エディターで SSDL ファイルを開きます。

    • カスタム データ クラスにマップされていないすべてのエンティティの EntityType 要素を削除します。

    • カスタム データ クラスのプロパティにマップされていないすべてのプロパティの ScalarProperty 要素を削除します。

    • 変更内容を .ssdl ファイルに保存します。

  4. マッピング ファイルのあるディレクトリで EdmGen.exe ユーティリティを実行して、更新されたマッピング ファイルを検証します。

    • 次のコマンドを使用します。

      %windir%\Microsoft.NET\Framework\v4\edmgen.exe /mode:ValidateArtifacts  
      /inssdl:.  \YourModel.ssdl /inmsl:.  \YourModel.msl /incsdl:.  \YourModel.csdl  
      
    Bb738625.note(ja-jp,VS.100).gif注 :
    改行を削除し、YourModel を対象のマッピング ファイルの名前で置き換えてください。

    • 出力を確認し、検証エラーがあればエラーを修正します。
  5. 自動生成されたオブジェクト コードを再生成、保存、および削除します。

    • Visual Studio のソリューション エクスプローラーで、.csdl* *ファイルを右クリックし、[カスタム ツールの実行] をクリックします。

    • これにより、変更された .csdl ファイルに基づいて、オブジェクト レイヤーが生成されます。

    • .csdl ファイルのノードを展開し、デザイナー ファイルを開きます。ファイルに別の名前を付けて保存します。

      これにより、自動生成されたオブジェクト レイヤー ファイルが保存されます。 このファイルのコードは、トピック「方法: カスタム オブジェクト コンテキストを定義する (Entity Framework)」を参照してください。

    • デザイナー ファイルをプロジェクトから除外します。

    • .csdl ファイルを選択し、[プロパティ] ウィンドウの [カスタム ツール] の値をクリアします。

      これにより、オブジェクト レイヤー ファイルが再生成されなくなります。 このファイルを後で生成するには、[プロパティ] ウィンドウの [カスタム ツール] に「EntityModelCodeGenerator」と入力し、手順 1. を繰り返します。

次の .csdl ファイルは、ContactOrders、および 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>

次の .msl ファイルは、ContactOrders、および LineItem カスタム データ クラスを AdventureWorks データベース内の ContactSalesOrderHeader、および SalesOrderDetail テーブルにマップするようにカスタマイズされています。

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

次の .ssdl ファイルは、AdventureWorks データベース内の ContactSalesOrderHeader、および SalesOrderDetail テーブルを使用して ContactOrders、および LineItem カスタム データ クラスをサポートするようにカスタマイズされています。

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

参照

概念

オブジェクトのカスタマイズ (Entity Framework)

その他のリソース

CSDL、SSDL、および MSL 仕様