방법: 사용자 지정 개체를 사용할 수 있도록 모델링 및 매핑 파일 사용자 지정(Entity Framework)

Entity Framework 에서 사용자 지정 데이터 클래스를 사용하려면 개념적 모델에 정의된 엔터티 형식 및 속성이 사용자 지정 데이터 클래스와 일치해야 합니다. 엔터티 데이터 모델 도구를 사용하여 데이터베이스에서 모델 및 매핑 콘텐츠를 생성할 때 개념적 모델의 엔터티 형식 및 엔터티 집합은 데이터베이스의 테이블과 일치합니다. 모델 및 매핑 콘텐츠가 사용자 지정 데이터 클래스와 일치하도록 업데이트하려면 다음 단계를 수행해야 합니다.

  1. CSDL(개념 스키마 정의 언어)에 정의된 개념적 모델 콘텐츠가 사용자 지정 데이터 클래스와 일치하도록 업데이트합니다.

  2. 필요한 경우 SSDL(저장소 스키마 정의 언어)에 정의된 저장소 모델 콘텐츠를 업데이트합니다.

  3. MSL(매핑 사양 언어)에 정의된 매핑 콘텐츠를 업데이트합니다.

  4. 업데이트된 모델 및 매핑 콘텐츠의 유효성을 검사합니다.

  5. Visual Studio에서 개체 계층을 생성하지 않도록 지정합니다.

Bb738625.note(ko-kr,VS.100).gif참고:
엔터티 데이터 모델 도구는 SSDL(저장소 스키마 정의 언어) 콘텐츠를 기반으로 새 데이터베이스를 만드는 스크립트도 생성할 수 있습니다.이 경우 사용자 지정 데이터 클래스와 일치하는 데이터 모델을 만든 후 .edmx 파일을 기반으로 새 데이터베이스를 만들 수 있습니다.자세한 내용은 How to: Create a Database from a Conceptual Model를 참조하십시오.

이 항목에서는 ADO.NET Entity Data Model Designer(Entity Designer) 또는 EDM 생성기(EdmGen.exe) 유틸리티를 사용하여 모델을 업데이트하는 방법을 보여 줍니다. 이 항목의 예제를 실행하려면 이미 모델이 생성되어 있어야 합니다. 이 예제의 모델은 AdventureWorks 데이터베이스의 Contact, SalesOrderHeaderSalesOrderDetail 테이블을 기반으로 합니다. 새 모델을 만드는 방법은 방법: 엔터티 데이터 모델 마법사 사용(Entity Framework) 또는 방법: EdmGen.exe를 사용하여 모델 및 매핑 파일 생성을 참조하십시오. 또한 Contact, SalesOrderHeaderSalesOrderDetail 테이블을 프로젝트로 매핑하는 Contact, OrdersLineItem 사용자 지정 데이터 클래스를 추가해야 합니다. Contact, OrdersLineItem 사용자 지정 데이터 클래스를 정의하려면 방법: POCO 엔터티 정의(Entity Framework)를 참조하십시오.

다음 절차에서는 .edmx 파일이 Entity Designer에서 열려 있다고 가정합니다.

엔터티 데이터 모델 디자이너를 사용하여 모델 수정

  1. 사용자 지정 데이터 클래스의 이름이 반영되도록 EntityTypeEntitySet 요소의 이름을 변경합니다.

    • Contact 엔터티를 선택합니다. 속성 창에서 Entity Set NameContactSet으로 설정합니다.

    • SalesOrderHeader 엔터티를 선택합니다. 속성 창에서 NameOrder로 설정하고 Entity Set NameOrderSet으로 설정합니다.

    • SalesOrderDetails를 선택합니다. 속성 창에서 NameLineItem으로 설정하고 Entity Set NameLineItemSet으로 설정합니다.

  2. 탐색 속성의 이름을 변경합니다.

    • Contact 엔터티의 SalesOrderHeaders 탐색 속성을 선택합니다. 속성 창에서 NameOrders로 설정합니다.

    • SalesOrderHeader 엔터티의 SalesOrderDetails 탐색 속성을 선택합니다. 속성 창에서 NameLineItems로 설정합니다.

    • SalesOrderDetail 엔터티의 SalesOrderHeader 탐색 속성을 선택합니다. 속성 창에서 NameOrder로 설정합니다.

  3. 연결을 변경합니다.

    • Client 엔터티 형식과 Order 엔터티 형식 간 연결을 선택하고 다음 속성이 속성 창의 다음 값과 일치하도록 수정합니다.

      Association Set Name: Order_ Contact_ ContactIDSet

      End1 Navigation Property: Orders

      End1 Role Name: Contact

      End2 Navigation Property: Contact

      End2 Role Name: Order

      Name: Order_Contact_ContactID

    • Order 엔터티 형식과 LineItem 엔터티 형식 간 연결을 선택하고 다음 속성이 속성 창의 다음 값과 일치하도록 수정합니다.

      Association Set Name: LineItem_Order_SalesOrderIDSet

      End1 Navigation Property: LineItems

      End1 Role Name: Order

      End2 Navigation Property: Order

      End2 Role Name: LineItem

      Name: LineItem_Order_SalesOrderID

  4. Order 엔터티 형식의 속성에서 복합 형식을 만듭니다.

    • Order 엔터티의 AccountNumber, Comment, PurchaseOrderNumberSalesOrderNumber 속성을 선택한 후 마우스 오른쪽 단추를 클릭하고 복합 형식 만들기를 선택합니다.

      선택한 속성의 새 복합 형식이 Model 브라우저에 추가됩니다. 새 복합 형식 속성이 SalesOrderHeader 엔터티에 추가됩니다. 복합 형식 및 복합 형식 속성에 기본 이름이 지정됩니다.

    • 복합 형식의 이름을 OrderInfo로 바꿉니다.

    • 복합 형식 속성의 이름을 ExtendedInfo로 바꿉니다.

  5. 변경 내용을 .edmx 파일에 저장합니다.

  6. .edmx 파일의 코드 생성 기능을 사용하지 않도록 설정합니다. ADO.NET Entity Data Model Designer(Entity Designer)에서 .edmx 파일을 엽니다. 디자이너 화면을 마우스 오른쪽 단추로 클릭하고 속성을 선택합니다. 속성 창에서 Code Generation Strategy 속성을 선택하고 None을 선택합니다. 속성 창이 표시되지 않으면 F4 키를 누릅니다.

EdmGen.exe를 사용하여 모델 수정

  1. Visual Studio 또는 텍스트 편집기에서 CSDL 파일을 엽니다.

    • 사용자 지정 데이터 클래스의 이름이 반영되도록 EntityTypeEntitySet 요소의 이름을 변경합니다.

    • 사용자 지정 데이터 클래스의 속성 이름과 일치하도록 각 형식의 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(ko-kr,VS.100).gif참고:
    줄 바꿈을 제거하고 YourModel을 해당 매핑 파일에 사용되는 이름으로 변경합니다.

    • 출력 내용을 검토하고 유효성 검사 오류를 정정합니다.
  5. 자동 생성된 개체 코드를 다시 생성하고, 저장하고, 제거합니다.

    • Visual Studio의 솔루션 탐색기에서 .csdl* *파일을 마우스 오른쪽 단추로 클릭하고 사용자 지정 도구 실행을 선택합니다.

    • 이렇게 하면 수정된 .csdl 파일을 기반으로 개체 계층이 다시 생성됩니다.

    • .csdl 파일 노드를 확장하고, 디자이너 파일을 열고, 파일을 다른 이름으로 저장합니다.

      이렇게 하면 자동 생성된 개체 계층 파일이 저장됩니다. 이 파일의 코드는 방법: 사용자 지정 개체 컨텍스트 정의(Entity Framework) 항목에서 사용됩니다.

    • 프로젝트에서 디자이너 파일을 제외합니다.

    • .csdl 파일을 선택하고 속성 창에서 사용자 지정 도구 값을 지웁니다.

      그러면 개체 계층 파일이 다시 생성되지 않습니다. 나중에 이 파일을 생성하려면 속성 창에서 사용자 지정 도구EntityModelCodeGenerator를 입력하고 1단계를 반복합니다.

예제

다음 .csdl 파일은 Contact, OrdersLineItem 사용자 지정 데이터 클래스를 지원하도록 사용자 지정되었습니다.

<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 파일은 Contact, OrdersLineItem 사용자 지정 데이터 클래스를 AdventureWorks 데이터베이스의 Contact, SalesOrderHeaderSalesOrderDetail 테이블에 매핑하도록 사용자 지정되었습니다.

<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 데이터베이스의 Contact, SalesOrderHeaderSalesOrderDetail 테이블을 사용하여 Contact, OrdersLineItem 사용자 지정 데이터 클래스를 지원하도록 사용자 지정되었습니다.

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