XML 사양

MSL(매핑 사양 언어)은 Entity Framework 애플리케이션의 개념적 모델과 스토리지 모델 간의 매핑을 설명하는 XML 기반 언어입니다.

Entity Framework 애플리케이션에서는 빌드 시 MSL로 작성된 .msl 파일에서 매핑 메타데이터가 로드됩니다. Entity Framework는 런타임 시 매핑 메타데이터를 사용하여 개념적 모델에 대한 쿼리를 저장소별 명령으로 변환합니다.

Entity Framework Designer(EF Designer)는 디자인 타임 시 매핑 정보를 .edmx 파일에 저장합니다. 빌드 시 Entity Designer는 .edmx 파일의 정보를 사용하여 런타임 시 Entity Framework에서 필요로 하는 .msl 파일을 만듭니다.

MSL에서 참조하는 모든 개념적 모델 형식 또는 스토리지 모델 형식의 이름은 해당 네임스페이스 이름으로 한정되어야 합니다. 개념적 모델 네임스페이스 이름에 대한 자세한 내용은 CSDL 사양을 참조하세요. 개념적 모델 네임스페이스 이름에 대한 자세한 내용은 SSDL 사양을 참조하세요.

MSL 버전은 XML 네임스페이스로 구분됩니다.

MSL 버전 XML 네임스페이스
MSL v1 urn:schemas-microsoft-com:windows:storage:mapping:CS
MSL v2 https://schemas.microsoft.com/ado/2008/09/mapping/cs
MSL v3 https://schemas.microsoft.com/ado/2009/11/mapping/cs

Alias 요소(MSL)

MSL(매핑 사양 언어)의 Alias 요소는 Mapping 요소의 자식 요소이며 개념적 모델 및 스토리지 모델 네임스페이스에 대한 별칭을 정의하는 데 사용됩니다. MSL에서 참조하는 모든 개념적 모델 형식 또는 스토리지 모델 형식의 이름은 해당 네임스페이스 이름으로 한정되어야 합니다. 개념적 모델 네임스페이스 이름에 대한 자세한 내용은 스키마 요소(CSDL)를 참조하세요. 스토리지 모델 네임스페이스 이름에 대한 자세한 내용은 스키마 요소(SSDL)를 참조하세요.

Alias 요소는 자식 요소를 포함할 수 없습니다.

적용 가능한 특성

다음 표에서는 Alias 요소에 적용할 수 있는 특성에 대해 설명합니다.

특성 이름 필수
Value 특성으로 지정된 네임스페이스의 별칭입니다.
Key 요소의 값이 별칭으로 사용되는 네임스페이스입니다.

예시

다음 예제에서는 개념적 모델에 정의된 형식에 대해 별칭(c)을 정의하는 Alias 요소를 보여 줍니다.

 <Mapping Space="C-S"
          xmlns="https://schemas.microsoft.com/ado/2009/11/mapping/cs">
   <Alias Key="c" Value="SchoolModel"/>
   <EntityContainerMapping StorageEntityContainer="SchoolModelStoreContainer"
                           CdmEntityContainer="SchoolModelEntities">
     <EntitySetMapping Name="Courses">
       <EntityTypeMapping TypeName="c.Course">
         <MappingFragment StoreEntitySet="Course">
           <ScalarProperty Name="CourseID" ColumnName="CourseID" />
           <ScalarProperty Name="Title" ColumnName="Title" />
           <ScalarProperty Name="Credits" ColumnName="Credits" />
           <ScalarProperty Name="DepartmentID" ColumnName="DepartmentID" />
         </MappingFragment>
       </EntityTypeMapping>
     </EntitySetMapping>
     <EntitySetMapping Name="Departments">
       <EntityTypeMapping TypeName="c.Department">
         <MappingFragment StoreEntitySet="Department">
           <ScalarProperty Name="DepartmentID" ColumnName="DepartmentID" />
           <ScalarProperty Name="Name" ColumnName="Name" />
           <ScalarProperty Name="Budget" ColumnName="Budget" />
           <ScalarProperty Name="StartDate" ColumnName="StartDate" />
           <ScalarProperty Name="Administrator" ColumnName="Administrator" />
         </MappingFragment>
       </EntityTypeMapping>
     </EntitySetMapping>
   </EntityContainerMapping>
 </Mapping>

AssociationEnd 요소(MSL)

MSL(매핑 사양 언어)의 AssociationEnd 요소는 개념적 모델에서 엔터티 형식의 수정 함수가 기본 데이터베이스의 저장 프로시저에 매핑될 때 사용됩니다. 수정 저장 프로시저가 연결 속성에 값이 있는 매개 변수를 사용하는 경우 AssociationEnd 요소는 해당 속성 값을 매개 변수에 매핑합니다. 자세한 내용은 아래 예제를 참조하십시오.

엔터티 형식의 수정 함수를 저장 프로시저에 매핑하는 방법에 대한 자세한 내용은 ModificationFunctionMapping 요소(MSL) 및 연습: 엔터티를 저장 프로시저에 매핑을 참조하세요.

AssociationEnd 요소는 다음 자식 요소를 포함할 수 있습니다.

  • ScalarProperty

적용 가능한 특성

다음 표에서는 AssociationEnd 요소에 적용할 수 있는 특성에 대해 설명합니다.

특성 이름 필수
AssociationSet 매핑되는 연결의 이름
From 매핑되는 연결에 해당하는 탐색 속성의 FromRole 특성 값입니다. 자세한 내용은 NavigationProperty 요소(CSDL)를 참조하세요.
받는 사람 매핑되는 연결에 해당하는 탐색 속성의 ToRole 특성 값입니다. 자세한 내용은 NavigationProperty 요소(CSDL)를 참조하세요.

예시

다음과 같은 개념적 모델 엔터티 형식이 있다고 가정합니다.

 <EntityType Name="Course">
   <Key>
     <PropertyRef Name="CourseID" />
   </Key>
   <Property Type="Int32" Name="CourseID" Nullable="false" />
   <Property Type="String" Name="Title" Nullable="false" MaxLength="100"
             FixedLength="false" Unicode="true" />
   <Property Type="Int32" Name="Credits" Nullable="false" />
   <NavigationProperty Name="Department"
                       Relationship="SchoolModel.FK_Course_Department"
                       FromRole="Course" ToRole="Department" />
 </EntityType>

또한 다음과 같은 저장 프로시저가 있다고 가정합니다.

 CREATE PROCEDURE [dbo].[UpdateCourse]
                                @CourseID int,
                                @Title nvarchar(50),
                                @Credits int,
                                @DepartmentID int
                                AS
                                UPDATE Course SET Title=@Title,
                                                              Credits=@Credits,
                                                              DepartmentID=@DepartmentID
                                WHERE CourseID=@CourseID;

Course 엔터티의 업데이트 함수를 이 저장 프로시저에 매핑하려면 DepartmentID 매개 변수에 값을 제공해야 합니다. DepartmentID의 값은 엔터티 형식의 속성에 해당하지 않으며, 여기에 표시된 매핑을 사용하는 독립 연결에 포함되어 있습니다.

 <AssociationSetMapping Name="FK_Course_Department"
                        TypeName="SchoolModel.FK_Course_Department"
                        StoreEntitySet="Course">
   <EndProperty Name="Course">
     <ScalarProperty Name="CourseID" ColumnName="CourseID" />
   </EndProperty>
   <EndProperty Name="Department">
     <ScalarProperty Name="DepartmentID" ColumnName="DepartmentID" />
   </EndProperty>
 </AssociationSetMapping>

다음 코드에서는 FK_Course_Department 연결의 DepartmentID 속성을 Course 엔터티 형식의 업데이트 함수가 매핑된 UpdateCourse 저장 프로시저에 매핑하는 데 사용되는 AssociationEnd 요소를 보여 줍니다.

 <EntitySetMapping Name="Courses">
   <EntityTypeMapping TypeName="SchoolModel.Course">
     <MappingFragment StoreEntitySet="Course">
       <ScalarProperty Name="Credits" ColumnName="Credits" />
       <ScalarProperty Name="Title" ColumnName="Title" />
       <ScalarProperty Name="CourseID" ColumnName="CourseID" />
     </MappingFragment>
   </EntityTypeMapping>
   <EntityTypeMapping TypeName="SchoolModel.Course">
     <ModificationFunctionMapping>
       <UpdateFunction FunctionName="SchoolModel.Store.UpdateCourse">
         <AssociationEnd AssociationSet="FK_Course_Department"
                         From="Course" To="Department">
           <ScalarProperty Name="DepartmentID"
                           ParameterName="DepartmentID"
                           Version="Current" />
         </AssociationEnd>
         <ScalarProperty Name="Credits" ParameterName="Credits"
                         Version="Current" />
         <ScalarProperty Name="Title" ParameterName="Title"
                         Version="Current" />
         <ScalarProperty Name="CourseID" ParameterName="CourseID"
                         Version="Current" />
       </UpdateFunction>
     </ModificationFunctionMapping>
   </EntityTypeMapping>
 </EntitySetMapping>

AssociationSetMapping 요소(MSL)

MSL(매핑 사양 언어)의 AssociationSetMapping 요소는 개념적 모델의 연결과 기본 데이터베이스 테이블 열 간의 매핑을 정의합니다.

개념적 모델의 연결은 기본 데이터베이스의 기본 및 외래 키 열을 나타내는 속성이 있는 형식입니다. AssociationSetMapping 요소는 2개의 EndProperty 요소를 사용하여 연결 형식 속성과 데이터베이스 열 간의 매핑을 정의합니다. Condition 요소를 사용하여 이러한 매핑에 조건을 적용할 수 있습니다. ModificationFunctionMapping 요소를 사용하여 연결에 대한 삽입, 업데이트 및 삭제 함수를 데이터베이스의 저장 프로시저에 매핑할 수 있습니다. 또한 QueryView 요소에서 Entity SQL 문자열을 사용하여 연결과 테이블 열 간의 읽기 전용 매핑을 정의할 수 있습니다.

참고 항목

개념적 모델에서 연결에 대해 참조 제약 조건이 정의된 경우 이 연결은 AssociationSetMapping 요소로 매핑하지 않아도 됩니다. 참조 제약 조건이 있는 연결에 대한 AssociationSetMapping 요소가 있는 경우 AssociationSetMapping 요소에 정의된 매핑은 무시됩니다. 자세한 내용은 ReferentialConstraint 요소(CSDL)를 참조하세요.

AssociationSetMapping 요소는 다음 자식 요소를 포함할 수 있습니다.

  • QueryView(0개 또는 1개)
  • EndProperty(0개 또는 2개)
  • Condition(0개 이상)
  • ModificationFunctionMapping(0개 또는 1개)

적용 가능한 특성

다음 표에서는 AssociationSetMapping 요소에 적용할 수 있는 특성에 대해 설명합니다.

특성 이름 필수
이름 매핑되는 개념적 모델 연결 집합의 이름
TypeName 아니요 매핑되는 개념적 모델 연결 형식의 네임스페이스로 한정된 이름
StoreEntitySet 아니요 매핑되는 테이블의 이름

예시

다음 예제에서는 개념적 모델의 FK_Course_Department 연결 집합이 데이터베이스의 Course 테이블에 매핑되는 AssociationSetMapping 요소를 보여 줍니다. 연결 형식 속성과 테이블 열 간의 매핑은 자식 EndProperty 요소에 지정됩니다.

 <AssociationSetMapping Name="FK_Course_Department"
                        TypeName="SchoolModel.FK_Course_Department"
                        StoreEntitySet="Course">
   <EndProperty Name="Department">
     <ScalarProperty Name="DepartmentID" ColumnName="DepartmentID" />
   </EndProperty>
   <EndProperty Name="Course">
     <ScalarProperty Name="CourseID" ColumnName="CourseID" />
   </EndProperty>
 </AssociationSetMapping>

ComplexProperty 요소(MSL)

MSL(매핑 사양 언어)의 ComplexProperty 요소는 개념적 모델 엔터티 형식의 복합 형식 속성과 기본 데이터베이스 테이블 열 간의 매핑을 정의합니다. 속성-열 매핑은 자식 ScalarProperty 요소에 지정됩니다.

ComplexType 속성 요소는 다음 자식 요소를 포함할 수 있습니다.

  • ScalarProperty(0개 이상)
  • ComplexProperty(0개 이상)
  • ComplexTypeMapping(0개 이상)
  • Condition(0개 이상)

적용 가능한 특성

다음 표에서는 ComplexProperty 요소에 적용할 수 있는 특성에 대해 설명합니다.

특성 이름 필수
이름 개념적 모델에서 매핑되는 엔터티 형식의 복합 속성 이름입니다.
TypeName 아니요 개념적 모델 속성 형식의 네임스페이스로 한정된 이름입니다.

예시

다음 예제는 School 모델을 기반으로 합니다. 다음 복합 형식이 개념적 모델에 추가되었습니다.

 <ComplexType Name="FullName">
   <Property Type="String" Name="LastName"
             Nullable="false" MaxLength="50"
             FixedLength="false" Unicode="true" />
   <Property Type="String" Name="FirstName"
             Nullable="false" MaxLength="50"
             FixedLength="false" Unicode="true" />
 </ComplexType>

Person 엔터티 형식의 LastNameFirstName 속성은 하나의 복합 속성(Name)으로 대체되었습니다.

 <EntityType Name="Person">
   <Key>
     <PropertyRef Name="PersonID" />
   </Key>
   <Property Name="PersonID" Type="Int32" Nullable="false"
             annotation:StoreGeneratedPattern="Identity" />
   <Property Name="HireDate" Type="DateTime" />
   <Property Name="EnrollmentDate" Type="DateTime" />
   <Property Name="Name" Type="SchoolModel.FullName" Nullable="false" />
 </EntityType>

다음 MSL에서는 Name 속성을 기본 데이터베이스의 열에 매핑하는 데 사용되는 ComplexProperty 요소를 보여 줍니다.

 <EntitySetMapping Name="People">
   <EntityTypeMapping TypeName="SchoolModel.Person">
     <MappingFragment StoreEntitySet="Person">
       <ScalarProperty Name="PersonID" ColumnName="PersonID" />
       <ScalarProperty Name="HireDate" ColumnName="HireDate" />
       <ScalarProperty Name="EnrollmentDate" ColumnName="EnrollmentDate" />
       <ComplexProperty Name="Name" TypeName="SchoolModel.FullName">
         <ScalarProperty Name="FirstName" ColumnName="FirstName" />
         <ScalarProperty Name="LastName" ColumnName="LastName" />  
       </ComplexProperty>
     </MappingFragment>
   </EntityTypeMapping>
 </EntitySetMapping>

ComplexTypeMapping 요소(MSL)

MSL(매핑 사양 언어)의 ComplexTypeMapping 요소는 ResultMapping 요소의 자식 요소이며 다음과 같은 경우에 개념적 모델의 함수 가져오기와 기본 데이터베이스의 저장 프로시저 간 매핑을 정의합니다.

  • Function Import가 개념적 복합 형식을 반환하는 경우
  • 저장 프로시저에서 반환되는 열 이름이 복합 형식의 속성 이름과 정확히 일치하지 않는 경우

기본적으로 저장 프로시저에서 반환되는 열과 복합 형식 간의 매핑은 열 및 속성 이름을 기반으로 합니다. 열 이름이 속성 이름과 정확히 일치하지 않으면 ComplexTypeMapping 요소를 사용하여 매핑을 정의해야 합니다. 기본 매핑의 예제는 FunctionImportMapping 요소(MSL)를 참조하세요.

ComplexTypeMapping 요소는 다음 자식 요소를 포함할 수 있습니다.

  • ScalarProperty(0개 이상)

적용 가능한 특성

다음 표에서는 ComplexTypeMapping 요소에 적용할 수 있는 특성에 대해 설명합니다.

특성 이름 필수
TypeName 매핑되는 복합 형식의 네임스페이스로 한정된 이름입니다.

예시

다음과 같은 저장 프로시저가 있다고 가정합니다.

 CREATE PROCEDURE [dbo].[GetGrades]
             @student_Id int
             AS
             SELECT     EnrollmentID as enroll_id,
                                                                             Grade as grade,
                                                                             CourseID as course_id,
                                                                             StudentID as student_id
                                               FROM dbo.StudentGrade
             WHERE StudentID = @student_Id

또한 다음과 같은 개념적 모델 복합 형식이 있다고 가정합니다.

 <ComplexType Name="GradeInfo">
   <Property Type="Int32" Name="EnrollmentID" Nullable="false" />
   <Property Type="Decimal" Name="Grade" Nullable="true"
             Precision="3" Scale="2" />
   <Property Type="Int32" Name="CourseID" Nullable="false" />
   <Property Type="Int32" Name="StudentID" Nullable="false" />
 </ComplexType>

이전 복합 형식의 인스턴스를 반환하는 함수 가져오기를 만들려면 저장 프로시저에서 반환되는 열과 엔터티 형식 간의 매핑을 ComplexTypeMapping 요소에 정의해야 합니다.

 <FunctionImportMapping FunctionImportName="GetGrades"
                        FunctionName="SchoolModel.Store.GetGrades" >
   <ResultMapping>
     <ComplexTypeMapping TypeName="SchoolModel.GradeInfo">
       <ScalarProperty Name="EnrollmentID" ColumnName="enroll_id"/>
       <ScalarProperty Name="CourseID" ColumnName="course_id"/>
       <ScalarProperty Name="StudentID" ColumnName="student_id"/>
       <ScalarProperty Name="Grade" ColumnName="grade"/>
     </ComplexTypeMapping>
   </ResultMapping>
 </FunctionImportMapping>

Condition 요소(MSL)

MSL(매핑 사양 언어)의 Condition 요소는 개념적 모델과 기본 데이터베이스 간의 매핑에 대한 조건을 적용합니다. XML 노드 내에 정의된 매핑은 자식 Condition 요소에 지정된 모든 조건이 충족되는 경우에 유효합니다. 그렇지 않으면 매핑이 유효하지 않습니다. 예를 들어 MappingFragment 요소에 하나 이상의 Condition 자식 요소가 포함된 경우 MappingFragment 노드 내에 정의된 매핑은 자식 Condition 요소의 모든 조건이 충족되는 경우에만 유효합니다.

각 조건은 Name(Name 특성으로 지정된 개념적 모델 엔터티 속성의 이름) 또는 ColumnName(ColumnName 특성으로 지정된 데이터베이스 열 이름)에 적용될 수 있습니다. Name 특성이 설정되면 엔터티 속성 값에 대한 조건이 확인됩니다. ColumnName 특성이 설정되면 열 값에 대한 조건이 확인됩니다. Name 또는 ColumnName 특성 중 하나만 Condition 요소에 지정할 수 있습니다.

참고 항목

FunctionImportMapping 요소 내에서 Condition 요소를 사용할 경우 Name 특성만 적용할 수 없습니다.

Condition 요소는 다음 요소의 자식 요소가 될 수 있습니다.

  • AssociationSetMapping
  • ComplexProperty
  • EntitySetMapping
  • MappingFragment
  • EntityTypeMapping

Condition 요소는 다음 자식 요소를 포함할 수 없습니다.

적용 가능한 특성

다음 표에서는 Condition 요소에 적용할 수 있는 특성에 대해 설명합니다.

특성 이름 필수
ColumnName 아니요 조건을 확인하는 데 사용되는 값이 있는 테이블 열의 이름입니다.
IsNull 아니요 True 또는 False입니다. 값이 True이고 열 값이 null이거나, 값이 False 이고 열 값이 null이 아니면 조건이 True입니다. 그렇지 않으면 조건이 false입니다.
IsNull 특성과 Value 특성은 동시에 사용할 수 없습니다.
아니요 열 값과 비교할 값입니다. 값이 동일하면 조건이 true입니다. 그렇지 않으면 조건이 false입니다.
IsNull 특성과 Value 특성은 동시에 사용할 수 없습니다.
이름 아니요 조건을 확인하는 데 사용되는 값이 있는 개념적 모델 엔터티 속성의 이름입니다.
FunctionImportMapping 요소 내에서 Condition 요소를 사용할 경우에는 이 특성을 적용할 수 없습니다.

예시

다음 예제에서는 MappingFragment 요소의 자식인 Condition 요소를 보여 줍니다. HireDate가 null이 아니고 EnrollmentDate가 null이면 데이터는 SchoolModel.Instructor 형식 및 Person 테이블의 PersonID, HireDate 열 간에 매핑됩니다. EnrollmentDate가 null이 아니고 HireDate가 null이면 데이터는 SchoolModel.Student 형식 및 Person 테이블의 PersonID, Enrollment 열 간에 매핑됩니다.

 <EntitySetMapping Name="People">
   <EntityTypeMapping TypeName="IsTypeOf(SchoolModel.Person)">
     <MappingFragment StoreEntitySet="Person">
       <ScalarProperty Name="PersonID" ColumnName="PersonID" />
       <ScalarProperty Name="FirstName" ColumnName="FirstName" />
       <ScalarProperty Name="LastName" ColumnName="LastName" />
     </MappingFragment>
   </EntityTypeMapping>
   <EntityTypeMapping TypeName="IsTypeOf(SchoolModel.Instructor)">
     <MappingFragment StoreEntitySet="Person">
       <ScalarProperty Name="PersonID" ColumnName="PersonID" />
       <ScalarProperty Name="HireDate" ColumnName="HireDate" />
       <Condition ColumnName="HireDate" IsNull="false" />
       <Condition ColumnName="EnrollmentDate" IsNull="true" />
     </MappingFragment>
   </EntityTypeMapping>
   <EntityTypeMapping TypeName="IsTypeOf(SchoolModel.Student)">
     <MappingFragment StoreEntitySet="Person">
       <ScalarProperty Name="PersonID" ColumnName="PersonID" />
       <ScalarProperty Name="EnrollmentDate"
                       ColumnName="EnrollmentDate" />
       <Condition ColumnName="EnrollmentDate" IsNull="false" />
       <Condition ColumnName="HireDate" IsNull="true" />
     </MappingFragment>
   </EntityTypeMapping>
 </EntitySetMapping>

DeleteFunction 요소(MSL)

MSL(매핑 사양 언어)의 DeleteFunction 요소는 개념적 모델의 엔터티 형식 또는 연결에 대한 삭제 함수를 기본 데이터베이스의 저장 프로시저에 매핑합니다. 수정 함수가 매핑되는 저장 프로시저는 스토리지 모델에서 선언되어야 합니다. 자세한 내용은 Function 요소(SSDL)를 참조하세요.

참고 항목

엔터티 형식의 삽입, 업데이트 또는 삭제 작업을 모두 저장 프로시저에 매핑하지 않으면 런타임 시 실행되고 UpdateException이 throw될 경우 매핑되지 않은 작업이 실패합니다.

EntityTypeMapping에 적용되는 DeleteFunction

EntityTypeMapping 요소에 적용될 경우 DeleteFunction 요소는 개념적 모델의 엔터티 형식에 대한 삭제 함수를 저장 프로시저에 매핑합니다.

EntityTypeMapping 요소에 적용할 때 DeleteFunction 요소는 다음 자식 요소를 포함할 수 있습니다.

  • AssociationEnd(0개 이상)
  • ComplexProperty(0개 이상)
  • ScalarProperty(0개 이상)

적용 가능한 특성

다음 표에서는 EntityTypeMapping 요소에 적용된 경우 DeleteFunction 요소에 적용할 수 있는 특성에 대해 설명합니다.

특성 이름 필수
FunctionName 삭제 함수가 매핑되는 저장 프로시저의 네임스페이스로 한정된 이름입니다. 저장 프로시저는 스토리지 모델에서 선언해야 합니다.
RowsAffectedParameter 아니요 영향을 받는 행 수를 반환하는 출력 매개 변수의 이름입니다.

예시

다음 예제는 School 모델을 기반으로 하며 Person 엔터티 형식의 삭제 함수를 DeletePerson 저장 프로시저에 매핑하는 DeleteFunction 요소를 보여 줍니다. DeletePerson 저장 프로시저는 스토리지 모델에서 선언됩니다.

 <EntitySetMapping Name="People">
   <EntityTypeMapping TypeName="SchoolModel.Person">
     <MappingFragment StoreEntitySet="Person">
       <ScalarProperty Name="PersonID" ColumnName="PersonID" />
       <ScalarProperty Name="LastName" ColumnName="LastName" />
       <ScalarProperty Name="FirstName" ColumnName="FirstName" />
       <ScalarProperty Name="HireDate" ColumnName="HireDate" />
       <ScalarProperty Name="EnrollmentDate"
                       ColumnName="EnrollmentDate" />
     </MappingFragment>
 </EntityTypeMapping>
   <EntityTypeMapping TypeName="SchoolModel.Person">
     <ModificationFunctionMapping>
       <InsertFunction FunctionName="SchoolModel.Store.InsertPerson">
         <ScalarProperty Name="EnrollmentDate"
                         ParameterName="EnrollmentDate" />
         <ScalarProperty Name="HireDate" ParameterName="HireDate" />
         <ScalarProperty Name="FirstName" ParameterName="FirstName" />
         <ScalarProperty Name="LastName" ParameterName="LastName" />
         <ResultBinding Name="PersonID" ColumnName="NewPersonID" />
       </InsertFunction>
       <UpdateFunction FunctionName="SchoolModel.Store.UpdatePerson">
         <ScalarProperty Name="EnrollmentDate"
                         ParameterName="EnrollmentDate"
                         Version="Current" />
         <ScalarProperty Name="HireDate" ParameterName="HireDate"
                         Version="Current" />
         <ScalarProperty Name="FirstName" ParameterName="FirstName"
                         Version="Current" />
         <ScalarProperty Name="LastName" ParameterName="LastName"
                         Version="Current" />
         <ScalarProperty Name="PersonID" ParameterName="PersonID"
                         Version="Current" />
       </UpdateFunction>
       <DeleteFunction FunctionName="SchoolModel.Store.DeletePerson">
         <ScalarProperty Name="PersonID" ParameterName="PersonID" />
       </DeleteFunction>
     </ModificationFunctionMapping>
   </EntityTypeMapping>
 </EntitySetMapping>

AssociationSetMapping에 적용된 DeleteFunction

AssociationSetMapping 요소에 적용될 경우 DeleteFunction 요소는 개념적 모델의 연결에 대한 삭제 함수를 저장 프로시저에 매핑합니다.

AssociationSetMapping 요소에 적용할 때 DeleteFunction 요소는 다음 자식 요소를 포함할 수 있습니다.

  • EndProperty

적용 가능한 특성

다음 표에서는 AssociationSetMapping 요소에 적용된 경우 DeleteFunction 요소에 적용할 수 있는 특성에 대해 설명합니다.

특성 이름 필수
FunctionName 삭제 함수가 매핑되는 저장 프로시저의 네임스페이스로 한정된 이름입니다. 저장 프로시저는 스토리지 모델에서 선언해야 합니다.
RowsAffectedParameter 아니요 영향을 받는 행 수를 반환하는 출력 매개 변수의 이름입니다.

예시

다음 예제는 School 모델을 기반으로 하며 CourseInstructor 연결의 삭제 함수를 DeleteCourseInstructor 저장 프로시저에 매핑하는 데 사용되는 DeleteFunction 요소를 보여 줍니다. DeleteCourseInstructor 저장 프로시저는 스토리지 모델에서 선언됩니다.

 <AssociationSetMapping Name="CourseInstructor"
                        TypeName="SchoolModel.CourseInstructor"
                        StoreEntitySet="CourseInstructor">
   <EndProperty Name="Person">
     <ScalarProperty Name="PersonID" ColumnName="PersonID" />
   </EndProperty>
   <EndProperty Name="Course">
     <ScalarProperty Name="CourseID" ColumnName="CourseID" />
   </EndProperty>
   <ModificationFunctionMapping>
     <InsertFunction FunctionName="SchoolModel.Store.InsertCourseInstructor" >   
       <EndProperty Name="Course">
         <ScalarProperty Name="CourseID" ParameterName="courseId"/>
       </EndProperty>
       <EndProperty Name="Person">
         <ScalarProperty Name="PersonID" ParameterName="instructorId"/>
       </EndProperty>
     </InsertFunction>
     <DeleteFunction FunctionName="SchoolModel.Store.DeleteCourseInstructor">
       <EndProperty Name="Course">
         <ScalarProperty Name="CourseID" ParameterName="courseId"/>
       </EndProperty>
       <EndProperty Name="Person">
         <ScalarProperty Name="PersonID" ParameterName="instructorId"/>
       </EndProperty>
     </DeleteFunction>
   </ModificationFunctionMapping>
 </AssociationSetMapping>

EndProperty 요소(MSL)

MSL(매핑 사양 언어)의 EndProperty 요소는 개념적 모델 연결의 끝 또는 수정 함수와 기본 데이터베이스 간에 매핑을 정의합니다. 속성-열 매핑은 자식 ScalarProperty 요소에 지정됩니다.

EndProperty 요소를 사용하여 개념적 모델 연결의 끝에 대한 매핑을 정의할 경우 이 요소는 AssociationSetMapping 요소의 자식 요소입니다. EndProperty 요소를 사용하여 개념적 모델 연결의 수정 함수에 대한 매핑을 정의할 경우 이 요소는 InsertFunction 요소 또는 DeleteFunction 요소의 자식 요소입니다.

EndProperty 요소는 다음 자식 요소를 포함할 수 있습니다.

  • ScalarProperty(0개 이상)

적용 가능한 특성

다음 표에서는 EndProperty 요소에 적용할 수 있는 특성에 대해 설명합니다.

특성 이름 필수
속성 매핑되는 연결 끝의 이름

예시

다음 예제에서는 개념적 모델의 FK_Course_Department 연결이 데이터베이스의 Course 테이블에 매핑되는 AssociationSetMapping 요소를 보여 줍니다. 연결 형식 속성과 테이블 열 간의 매핑은 자식 EndProperty 요소에 지정됩니다.

 <AssociationSetMapping Name="FK_Course_Department"
                        TypeName="SchoolModel.FK_Course_Department"
                        StoreEntitySet="Course">
   <EndProperty Name="Department">
     <ScalarProperty Name="DepartmentID" ColumnName="DepartmentID" />
   </EndProperty>
   <EndProperty Name="Course">
     <ScalarProperty Name="CourseID" ColumnName="CourseID" />
   </EndProperty>
 </AssociationSetMapping>

예시

다음 예제에서는 연결(CourseInstructor)의 삽입 및 삭제 함수를 기본 데이터베이스의 저장 프로시저에 매핑하는 EndProperty 요소를 보여 줍니다. 매핑되는 함수는 스토리지 모델에서 선언됩니다.

 <AssociationSetMapping Name="CourseInstructor"
                        TypeName="SchoolModel.CourseInstructor"
                        StoreEntitySet="CourseInstructor">
   <EndProperty Name="Person">
     <ScalarProperty Name="PersonID" ColumnName="PersonID" />
   </EndProperty>
   <EndProperty Name="Course">
     <ScalarProperty Name="CourseID" ColumnName="CourseID" />
   </EndProperty>
   <ModificationFunctionMapping>
     <InsertFunction FunctionName="SchoolModel.Store.InsertCourseInstructor" >   
       <EndProperty Name="Course">
         <ScalarProperty Name="CourseID" ParameterName="courseId"/>
       </EndProperty>
       <EndProperty Name="Person">
         <ScalarProperty Name="PersonID" ParameterName="instructorId"/>
       </EndProperty>
     </InsertFunction>
     <DeleteFunction FunctionName="SchoolModel.Store.DeleteCourseInstructor">
       <EndProperty Name="Course">
         <ScalarProperty Name="CourseID" ParameterName="courseId"/>
       </EndProperty>
       <EndProperty Name="Person">
         <ScalarProperty Name="PersonID" ParameterName="instructorId"/>
       </EndProperty>
     </DeleteFunction>
   </ModificationFunctionMapping>
 </AssociationSetMapping>

EntityContainerMapping 요소(MSL)

MSL(매핑 사양 언어)의 EntityContainerMapping 요소는 개념적 모델의 엔터티 컨테이너를 스토리지 모델의 엔터티 컨테이너에 매핑합니다. EntityContainerMapping 요소는 Mapping 요소의 자식 요소입니다.

EntityContainerMapping 요소는 다음에 나열된 순서대로 자식 요소를 포함할 수 있습니다.

  • EntitySetMapping(0개 이상)
  • AssociationSetMapping(0개 이상)
  • FunctionImportMapping(0개 이상)

적용 가능한 특성

다음 표에서는 EntityContainerMapping 요소에 적용할 수 있는 특성에 대해 설명합니다.

특성 이름 필수
StorageModelContainer 매핑되는 스토리지 모델 엔터티 컨테이너의 이름입니다.
CdmEntityContainer 매핑되는 개념적 모델 엔터티 컨테이너의 이름입니다.
GenerateUpdateViews 아니요 True 또는 False입니다. False이면 업데이트 뷰가 생성되지 않습니다. 데이터가 성공적으로 왕복하지 않을 수 있으므로 유효하지 않은 읽기 전용 매핑이 있는 경우에는 이 특성을 False로 설정해야 합니다.
기본값은 True입니다.

예시

다음 예제에서는 개념적 모델 엔터티 컨테이너인 SchoolModelEntities 컨테이너를 스토리지 모델 엔터티 컨테이너인 SchoolModelStoreContainer 컨테이너에 매핑하는 EntityContainerMapping 요소를 보여 줍니다.

 <EntityContainerMapping StorageEntityContainer="SchoolModelStoreContainer"
                         CdmEntityContainer="SchoolModelEntities">
   <EntitySetMapping Name="Courses">
     <EntityTypeMapping TypeName="c.Course">
       <MappingFragment StoreEntitySet="Course">
         <ScalarProperty Name="CourseID" ColumnName="CourseID" />
         <ScalarProperty Name="Title" ColumnName="Title" />
         <ScalarProperty Name="Credits" ColumnName="Credits" />
         <ScalarProperty Name="DepartmentID" ColumnName="DepartmentID" />
       </MappingFragment>
     </EntityTypeMapping>
   </EntitySetMapping>
   <EntitySetMapping Name="Departments">
     <EntityTypeMapping TypeName="c.Department">
       <MappingFragment StoreEntitySet="Department">
         <ScalarProperty Name="DepartmentID" ColumnName="DepartmentID" />
         <ScalarProperty Name="Name" ColumnName="Name" />
         <ScalarProperty Name="Budget" ColumnName="Budget" />
         <ScalarProperty Name="StartDate" ColumnName="StartDate" />
         <ScalarProperty Name="Administrator" ColumnName="Administrator" />
       </MappingFragment>
     </EntityTypeMapping>
   </EntitySetMapping>
 </EntityContainerMapping>

EntitySetMapping 요소(MSL)

MSL(매핑 사양 언어)의 EntitySetMapping 요소는 개념적 모델 엔터티 집합의 모든 형식을 스토리지 모델의 엔터티 집합에 매핑합니다. 개념적 모델의 엔터티 집합은 동일한 형식 및 파생된 형식을 갖는 엔터티 인스턴스의 논리적 컨테이너입니다. 스토리지 모델의 엔터티 집합은 기본 데이터베이스의 테이블 또는 뷰를 나타냅니다. 개념적 모델의 엔터티 집합은 EntitySetMapping 요소의 Name 특성 값으로 지정됩니다. 매핑 대상 테이블 또는 뷰는 각 자식 MappingFragment 요소나 EntitySetMapping 요소 자체의 StoreEntitySet 특성으로 지정됩니다.

EntitySetMapping 요소는 다음 자식 요소를 포함할 수 있습니다.

  • EntityTypeMapping(0개 이상)
  • QueryView(0개 또는 1개)
  • MappingFragment(0개 이상)

적용 가능한 특성

다음 표에서는 EntitySetMapping 요소에 적용할 수 있는 특성에 대해 설명합니다.

특성 이름 필수
이름 매핑되는 개념적 모델 엔터티 집합의 이름입니다.
TypeName1 아니요 매핑되는 개념적 모델 엔터티 형식의 이름입니다.
StoreEntitySet1 아니요 매핑되는 대상 스토리지 모델 엔터티 집합의 이름입니다.
MakeColumnsDistinct 아니요 고유한 행만 반환되는지 여부에 따라 True 또는 False입니다.
이 특성이 True로 설정되면 EntityContainerMapping 요소의 GenerateUpdateViews 특성도 False로 설정되어야 합니다.

 

1TypeNameStoreEntitySet 특성을 EntityTypeMapping 및 MappingFragment 자식 요소 대신 사용하면 단일 엔터티 형식을 단일 테이블에 매핑할 수 있습니다.

예시

다음 예제에서는 개념적 모델의 Courses 엔터티 집합에 있는 형식 3개(기본 형식 1개와 파생 형식 2개)를 기본 데이터베이스의 서로 다른 세 테이블에 매핑하는 EntitySetMapping 요소를 보여 줍니다. 테이블은 각 MappingFragment 요소의 StoreEntitySet 특성으로 지정됩니다.

 <EntitySetMapping Name="Courses">
   <EntityTypeMapping TypeName="IsTypeOf(SchoolModel1.Course)">
     <MappingFragment StoreEntitySet="Course">
       <ScalarProperty Name="CourseID" ColumnName="CourseID" />
       <ScalarProperty Name="DepartmentID" ColumnName="DepartmentID" />
       <ScalarProperty Name="Credits" ColumnName="Credits" />
       <ScalarProperty Name="Title" ColumnName="Title" />
     </MappingFragment>
   </EntityTypeMapping>
   <EntityTypeMapping TypeName="IsTypeOf(SchoolModel1.OnlineCourse)">
     <MappingFragment StoreEntitySet="OnlineCourse">
       <ScalarProperty Name="CourseID" ColumnName="CourseID" />
       <ScalarProperty Name="URL" ColumnName="URL" />
     </MappingFragment>
   </EntityTypeMapping>
   <EntityTypeMapping TypeName="IsTypeOf(SchoolModel1.OnsiteCourse)">
     <MappingFragment StoreEntitySet="OnsiteCourse">
       <ScalarProperty Name="CourseID" ColumnName="CourseID" />
       <ScalarProperty Name="Time" ColumnName="Time" />
       <ScalarProperty Name="Days" ColumnName="Days" />
       <ScalarProperty Name="Location" ColumnName="Location" />
     </MappingFragment>
   </EntityTypeMapping>
 </EntitySetMapping>

EntityTypeMapping 요소(MSL)

MSL(매핑 사양 언어)의 EntityTypeMapping 요소는 개념적 모델 엔터티 형식과 기본 데이터베이스 테이블 또는 뷰 간의 매핑을 정의합니다. 개념적 모델 엔터티 형식과 기본 데이터베이스 테이블 또는 뷰에 대한 자세한 내용은 EntityType 요소(CSDL) 및 EntitySet 요소(SSDL)를 참조하세요. 매핑되는 개념적 모델 엔터티 형식은 EntityTypeMapping 요소의 TypeName 특성으로 지정됩니다. 매핑되는 테이블 또는 뷰는 자식 MappingFragment 요소의 StoreEntitySet 특성으로 지정됩니다.

ModificationFunctionMapping 자식 요소를 사용하여 엔터티 형식의 삽입, 업데이트 또는 삭제 함수를 데이터베이스의 저장 프로시저에 매핑할 수 있습니다.

EntityTypeMapping 요소는 다음 자식 요소를 포함할 수 있습니다.

  • MappingFragment(0개 이상)
  • ModificationFunctionMapping(0개 또는 1개)
  • ScalarProperty
  • Condition

참고 항목

MappingFragmentModificationFunctionMapping 요소는 동시에 EntityTypeMapping 요소의 자식 요소가 될 수 없습니다.

참고 항목

ScalarPropertyCondition 요소는 EntityTypeMapping 요소가 FunctionImportMapping 요소 내에서 사용되는 경우에만 이 요소의 자식 요소가 될 수 있습니다.

적용 가능한 특성

다음 표에서는 EntityTypeMapping 요소에 적용할 수 있는 특성에 대해 설명합니다.

특성 이름 필수
TypeName 매핑되는 개념적 모델 엔터티 형식의 네임스페이스로 한정된 이름입니다.
해당 형식이 추상 또는 파생 형식이면 이 값은 IsOfType(Namespace-qualified_type_name)이어야 합니다.

예시

다음 예제에서는 두 EntityTypeMapping 자식 요소가 있는 EntitySetMapping 요소를 보여 줍니다. 첫 번째 EntityTypeMapping 요소에서는 SchoolModel.Person 엔터티 형식이 Person 테이블에 매핑됩니다. 두 번째 EntityTypeMapping 요소에서는 SchoolModel.Person 형식의 업데이트 기능이 데이터베이스의 저장 프로시저인 UpdatePerson에 매핑됩니다.

 <EntitySetMapping Name="People">
   <EntityTypeMapping TypeName="SchoolModel.Person">
     <MappingFragment StoreEntitySet="Person">
       <ScalarProperty Name="PersonID" ColumnName="PersonID" />
       <ScalarProperty Name="LastName" ColumnName="LastName" />
       <ScalarProperty Name="FirstName" ColumnName="FirstName" />
       <ScalarProperty Name="HireDate" ColumnName="HireDate" />
       <ScalarProperty Name="EnrollmentDate" ColumnName="EnrollmentDate" />
     </MappingFragment>
   </EntityTypeMapping>
   <EntityTypeMapping TypeName="SchoolModel.Person">
     <ModificationFunctionMapping>
       <UpdateFunction FunctionName="SchoolModel.Store.UpdatePerson">
         <ScalarProperty Name="EnrollmentDate" ParameterName="EnrollmentDate"
                         Version="Current" />
         <ScalarProperty Name="HireDate" ParameterName="HireDate"
                         Version="Current" />
         <ScalarProperty Name="FirstName" ParameterName="FirstName"
                         Version="Current" />
         <ScalarProperty Name="LastName" ParameterName="LastName"
                         Version="Current" />
         <ScalarProperty Name="PersonID" ParameterName="PersonID"
                         Version="Current" />
       </UpdateFunction>
     </ModificationFunctionMapping>
   </EntityTypeMapping>
 </EntitySetMapping>

예시

다음 예제에서는 루트 형식이 추상인 형식 계층 구조의 매핑을 보여 줍니다. TypeName 특성에 대한 IsOfType 구문 사용에 유의하세요.

 <EntitySetMapping Name="People">
   <EntityTypeMapping TypeName="IsTypeOf(SchoolModel.Person)">
     <MappingFragment StoreEntitySet="Person">
       <ScalarProperty Name="PersonID" ColumnName="PersonID" />
       <ScalarProperty Name="FirstName" ColumnName="FirstName" />
       <ScalarProperty Name="LastName" ColumnName="LastName" />
     </MappingFragment>
   </EntityTypeMapping>
   <EntityTypeMapping TypeName="IsTypeOf(SchoolModel.Instructor)">
     <MappingFragment StoreEntitySet="Person">
       <ScalarProperty Name="PersonID" ColumnName="PersonID" />
       <ScalarProperty Name="HireDate" ColumnName="HireDate" />
       <Condition ColumnName="HireDate" IsNull="false" />
       <Condition ColumnName="EnrollmentDate" IsNull="true" />
     </MappingFragment>
   </EntityTypeMapping>
   <EntityTypeMapping TypeName="IsTypeOf(SchoolModel.Student)">
     <MappingFragment StoreEntitySet="Person">
       <ScalarProperty Name="PersonID" ColumnName="PersonID" />
       <ScalarProperty Name="EnrollmentDate"
                       ColumnName="EnrollmentDate" />
       <Condition ColumnName="EnrollmentDate" IsNull="false" />
       <Condition ColumnName="HireDate" IsNull="true" />
     </MappingFragment>
   </EntityTypeMapping>
 </EntitySetMapping>

FunctionImportMapping 요소(MSL)

MSL(매핑 사양 언어)의 FunctionImportMapping 요소는 개념적 모델의 함수 가져오기와 기본 데이터베이스의 저장 프로시저 또는 함수 간에 매핑을 정의합니다. Function Import는 개념적 모델에서 선언해야 하고 저장 프로시저는 스토리지 모델에서 선언해야 합니다. 자세한 내용은 FunctionImport 요소(CSDL) 및 Function 요소(SSDL)를 참조하세요.

참고 항목

기본적으로, Function Import에서 개념적 모델 엔터티 형식이나 복합 형식을 반환하는 경우에는 기본 저장 프로시저에서 반환된 열 이름이 개념적 모델 형식의 속성 이름과 정확히 일치해야 합니다. 열 이름이 속성 이름과 정확히 일치하지 않으면 ResultMapping 요소에 매핑이 정의됩니다.

FunctionImportMapping 요소는 다음에 나열된 순서대로 자식 요소를 포함할 수 있습니다.

  • ResultMapping(0개 이상)

적용 가능한 특성

다음 표에서는 FunctionImportMapping 요소에 적용할 수 있는 특성에 대해 설명합니다.

특성 이름 필수
FunctionImportName 매핑되는 개념적 모델의 Function Import 이름
FunctionName 매핑되는 스토리지 모델 함수의 네임스페이스로 한정된 이름

예시

다음 예제는 School 모델을 기반으로 합니다. 다음은 스토리지 모델의 함수입니다.

 <Function Name="GetStudentGrades" Aggregate="false"
           BuiltIn="false" NiladicFunction="false"
           IsComposable="false" ParameterTypeSemantics="AllowImplicitConversion"
           Schema="dbo">
   <Parameter Name="StudentID" Type="int" Mode="In" />
 </Function>

다음은 개념적 모델의 Function Import입니다.

 <FunctionImport Name="GetStudentGrades" EntitySet="StudentGrades"
                 ReturnType="Collection(SchoolModel.StudentGrade)">
   <Parameter Name="StudentID" Mode="In" Type="Int32" />
 </FunctionImport>

다음 예제에서는 위의 함수와 함수 가져오기를 서로 매핑하는 데 사용되는 FunctionImportMapping 요소를 보여 줍니다.

 <FunctionImportMapping FunctionImportName="GetStudentGrades"
                        FunctionName="SchoolModel.Store.GetStudentGrades" />

 

InsertFunction 요소(MSL)

MSL(매핑 사양 언어)의 InsertFunction 요소는 개념적 모델의 엔터티 형식 또는 연결에 대한 삽입 함수를 기본 데이터베이스의 저장 프로시저에 매핑합니다. 수정 함수가 매핑되는 저장 프로시저는 스토리지 모델에서 선언되어야 합니다. 자세한 내용은 Function 요소(SSDL)를 참조하세요.

참고 항목

엔터티 형식의 삽입, 업데이트 또는 삭제 작업을 모두 저장 프로시저에 매핑하지 않으면 런타임 시 실행되고 UpdateException이 throw될 경우 매핑되지 않은 작업이 실패합니다.

InsertFunction 요소는 ModificationFunctionMapping 요소의 자식 요소가 될 수 있으며 EntityTypeMapping 요소 또는 AssociationSetMapping 요소에 적용될 수 있습니다.

EntityTypeMapping에 적용되는 InsertFunction

EntityTypeMapping 요소에 적용될 경우 InsertFunction 요소는 개념적 모델의 엔터티 형식에 대한 삽입 함수를 저장 프로시저에 매핑합니다.

EntityTypeMapping 요소에 적용할 때 InsertFunction 요소는 다음 자식 요소를 포함할 수 있습니다.

  • AssociationEnd(0개 이상)
  • ComplexProperty(0개 이상)
  • ResultBinding(0개 또는 1개)
  • ScalarProperty(0개 이상)

적용 가능한 특성

다음 표에서는 EntityTypeMapping 요소에 적용된 경우 InsertFunction 요소에 적용할 수 있는 특성에 대해 설명합니다.

특성 이름 필수
FunctionName 삽입 함수가 매핑되는 저장 프로시저의 네임스페이스로 한정된 이름입니다. 저장 프로시저는 스토리지 모델에서 선언해야 합니다.
RowsAffectedParameter 아니요 영향을 받는 행 수를 반환하는 출력 매개 변수의 이름입니다.

예시

다음 예제는 School 모델을 기반으로 하며, Person 엔터티 형식의 삽입 함수를 InsertPerson 저장 프로시저에 매핑하는 데 사용되는 InsertFunction 요소를 보여 줍니다. InsertPerson 저장 프로시저는 스토리지 모델에서 선언됩니다.

 <EntityTypeMapping TypeName="SchoolModel.Person">
   <ModificationFunctionMapping>
     <InsertFunction FunctionName="SchoolModel.Store.InsertPerson">
       <ScalarProperty Name="EnrollmentDate"
                       ParameterName="EnrollmentDate" />
       <ScalarProperty Name="HireDate" ParameterName="HireDate" />
       <ScalarProperty Name="FirstName" ParameterName="FirstName" />
       <ScalarProperty Name="LastName" ParameterName="LastName" />
       <ResultBinding Name="PersonID" ColumnName="NewPersonID" />
     </InsertFunction>
     <UpdateFunction FunctionName="SchoolModel.Store.UpdatePerson">
       <ScalarProperty Name="EnrollmentDate"
                       ParameterName="EnrollmentDate"
                       Version="Current" />
       <ScalarProperty Name="HireDate" ParameterName="HireDate"
                       Version="Current" />
       <ScalarProperty Name="FirstName" ParameterName="FirstName"
                       Version="Current" />
       <ScalarProperty Name="LastName" ParameterName="LastName"
                       Version="Current" />
       <ScalarProperty Name="PersonID" ParameterName="PersonID"
                       Version="Current" />
     </UpdateFunction>
     <DeleteFunction FunctionName="SchoolModel.Store.DeletePerson">
       <ScalarProperty Name="PersonID" ParameterName="PersonID" />
     </DeleteFunction>
   </ModificationFunctionMapping>
 </EntityTypeMapping>

AssociationSetMapping에 적용된 InsertFunction

AssociationSetMapping 요소에 적용될 경우 InsertFunction 요소는 개념적 모델의 연결에 대한 삽입 함수를 저장 프로시저에 매핑합니다.

AssociationSetMapping 요소에 적용할 때 InsertFunction 요소는 다음 자식 요소를 포함할 수 있습니다.

  • EndProperty

적용 가능한 특성

다음 표에서는 AssociationSetMapping 요소에 적용된 경우 InsertFunction 요소에 적용할 수 있는 특성에 대해 설명합니다.

특성 이름 필수
FunctionName 삽입 함수가 매핑되는 저장 프로시저의 네임스페이스로 한정된 이름입니다. 저장 프로시저는 스토리지 모델에서 선언해야 합니다.
RowsAffectedParameter 아니요 영향을 받는 행 수를 반환하는 출력 매개 변수의 이름입니다.

예시

다음 예제는 School 모델을 기반으로 하며, CourseInstructor 연결의 삽입 함수를 InsertCourseInstructor 저장 프로시저에 매핑하는 데 사용되는 InsertFunction 요소를 보여 줍니다. InsertCourseInstructor 저장 프로시저는 스토리지 모델에서 선언됩니다.

 <AssociationSetMapping Name="CourseInstructor"
                        TypeName="SchoolModel.CourseInstructor"
                        StoreEntitySet="CourseInstructor">
   <EndProperty Name="Person">
     <ScalarProperty Name="PersonID" ColumnName="PersonID" />
   </EndProperty>
   <EndProperty Name="Course">
     <ScalarProperty Name="CourseID" ColumnName="CourseID" />
   </EndProperty>
   <ModificationFunctionMapping>
     <InsertFunction FunctionName="SchoolModel.Store.InsertCourseInstructor" >   
       <EndProperty Name="Course">
         <ScalarProperty Name="CourseID" ParameterName="courseId"/>
       </EndProperty>
       <EndProperty Name="Person">
         <ScalarProperty Name="PersonID" ParameterName="instructorId"/>
       </EndProperty>
     </InsertFunction>
     <DeleteFunction FunctionName="SchoolModel.Store.DeleteCourseInstructor">
       <EndProperty Name="Course">
         <ScalarProperty Name="CourseID" ParameterName="courseId"/>
       </EndProperty>
       <EndProperty Name="Person">
         <ScalarProperty Name="PersonID" ParameterName="instructorId"/>
       </EndProperty>
     </DeleteFunction>
   </ModificationFunctionMapping>
 </AssociationSetMapping>

Mapping 요소(MSL)

MSL(매핑 사양 언어)의 Mapping 요소에는 스토리지 모델에 설명된 대로 개념적 모델에 정의된 개체를 데이터베이스에 매핑하기 위한 정보가 있습니다. 자세한 내용은 CSDL 사양 및 SSDL 사양을 참조하세요.

Mapping 요소는 매핑 사양의 루트 요소입니다. 매핑 사양의 XML 네임스페이스는 https://schemas.microsoft.com/ado/2009/11/mapping/cs입니다.

Mapping 요소는 다음에 나열된 순서대로 자식 요소를 포함할 수 있습니다.

  • Alias(0개 이상)
  • EntityContainerMapping(1개만)

MSL에서 참조하는 개념적 모델 형식과 스토리지 모델 형식의 이름은 해당 네임스페이스 이름으로 한정되어야 합니다. 개념적 모델 네임스페이스 이름에 대한 자세한 내용은 스키마 요소(CSDL)를 참조하세요. 스토리지 모델 네임스페이스 이름에 대한 자세한 내용은 스키마 요소(SSDL)를 참조하세요. MSL에서 사용되는 네임스페이스 별칭은 Alias 요소를 사용하여 정의할 수 있습니다.

적용 가능한 특성

다음 표에서는 Mapping 요소에 적용할 수 있는 특성에 대해 설명합니다.

특성 이름 필수
Space C-S. 이 값은 고정된 값이므로 변경할 수 없습니다.

예시

다음 예제에서는 School 모델의 일부를 기반으로 하는 Mapping 요소를 보여 줍니다. School 모델에 대한 자세한 내용은 빠른 시작(Entity Framework)을 참조하세요.

 <Mapping Space="C-S"
          xmlns="https://schemas.microsoft.com/ado/2009/11/mapping/cs">
   <Alias Key="c" Value="SchoolModel"/>
   <EntityContainerMapping StorageEntityContainer="SchoolModelStoreContainer"
                           CdmEntityContainer="SchoolModelEntities">
     <EntitySetMapping Name="Courses">
       <EntityTypeMapping TypeName="c.Course">
         <MappingFragment StoreEntitySet="Course">
           <ScalarProperty Name="CourseID" ColumnName="CourseID" />
           <ScalarProperty Name="Title" ColumnName="Title" />
           <ScalarProperty Name="Credits" ColumnName="Credits" />
           <ScalarProperty Name="DepartmentID" ColumnName="DepartmentID" />
         </MappingFragment>
       </EntityTypeMapping>
     </EntitySetMapping>
     <EntitySetMapping Name="Departments">
       <EntityTypeMapping TypeName="c.Department">
         <MappingFragment StoreEntitySet="Department">
           <ScalarProperty Name="DepartmentID" ColumnName="DepartmentID" />
           <ScalarProperty Name="Name" ColumnName="Name" />
           <ScalarProperty Name="Budget" ColumnName="Budget" />
           <ScalarProperty Name="StartDate" ColumnName="StartDate" />
           <ScalarProperty Name="Administrator" ColumnName="Administrator" />
         </MappingFragment>
       </EntityTypeMapping>
     </EntitySetMapping>
   </EntityContainerMapping>
 </Mapping>

MappingFragment 요소(MSL)

MSL(매핑 사양 언어)의 MappingFragment 요소는 개념적 모델 엔터티 형식의 속성과 데이터베이스 테이블 또는 뷰 간의 매핑을 정의합니다. 개념적 모델 엔터티 형식과 기본 데이터베이스 테이블 또는 뷰에 대한 자세한 내용은 EntityType 요소(CSDL) 및 EntitySet 요소(SSDL)를 참조하세요. MappingFragment는 EntityTypeMapping 요소 또는 EntitySetMapping 요소의 자식 요소가 될 수 있습니다.

MappingFragment 요소는 다음 자식 요소를 포함할 수 있습니다.

  • ComplexType(0개 이상)
  • ScalarProperty(0개 이상)
  • Condition(0개 이상)

적용 가능한 특성

다음 표에서는 MappingFragment 요소에 적용할 수 있는 특성에 대해 설명합니다.

특성 이름 필수
StoreEntitySet 매핑되는 테이블 또는 뷰의 이름입니다.
MakeColumnsDistinct 아니요 고유한 행만 반환되는지 여부에 따라 True 또는 False입니다.
이 특성이 True로 설정되면 EntityContainerMapping 요소의 GenerateUpdateViews 특성도 False로 설정되어야 합니다.

예시

다음 예제에서는 MappingFragment 요소를 EntityTypeMapping 요소의 자식 요소로 보여 줍니다. 이 예제에서 개념적 모델의 Course 형식에 대한 속성은 데이터베이스의 Course 테이블에 있는 열에 매핑됩니다.

 <EntitySetMapping Name="Courses">
   <EntityTypeMapping TypeName="SchoolModel.Course">
     <MappingFragment StoreEntitySet="Course">
       <ScalarProperty Name="CourseID" ColumnName="CourseID" />
       <ScalarProperty Name="Title" ColumnName="Title" />
       <ScalarProperty Name="Credits" ColumnName="Credits" />
       <ScalarProperty Name="DepartmentID" ColumnName="DepartmentID" />
     </MappingFragment>
   </EntityTypeMapping>
 </EntitySetMapping>

예시

다음 예제에서는 MappingFragment 요소를 EntitySetMapping 요소의 자식 요소로 보여 줍니다. 위 예제와 같이 개념적 모델의 Course 형식에 대한 속성은 데이터베이스의 Course 테이블에 있는 열에 매핑됩니다.

 <EntitySetMapping Name="Courses" TypeName="SchoolModel.Course">
     <MappingFragment StoreEntitySet="Course">
       <ScalarProperty Name="CourseID" ColumnName="CourseID" />
       <ScalarProperty Name="Title" ColumnName="Title" />
       <ScalarProperty Name="Credits" ColumnName="Credits" />
       <ScalarProperty Name="DepartmentID" ColumnName="DepartmentID" />
     </MappingFragment>
 </EntitySetMapping>

ModificationFunctionMapping 요소(MSL)

MSL(매핑 사양 언어)의 ModificationFunctionMapping 요소는 개념적 모델 엔터티 형식의 삽입, 업데이트 및 삭제 함수를 기본 데이터베이스의 저장 프로시저에 매핑합니다. 또한 ModificationFunctionMapping 요소는 개념적 모델의 다대다 연결에 대한 삽입 및 삭제 함수를 기본 데이터베이스의 저장 프로시저에 매핑할 수 있습니다. 수정 함수가 매핑되는 저장 프로시저는 스토리지 모델에서 선언되어야 합니다. 자세한 내용은 Function 요소(SSDL)를 참조하세요.

참고 항목

엔터티 형식의 삽입, 업데이트 또는 삭제 작업을 모두 저장 프로시저에 매핑하지 않으면 런타임 시 실행되고 UpdateException이 throw될 경우 매핑되지 않은 작업이 실패합니다.

참고 항목

상속 계층 구조의 한 엔터티에 대한 수정 함수가 저장 프로시저에 매핑된 경우 계층 구조의 모든 형식에 대한 수정 함수가 저장 프로시저에 매핑되어야 합니다.

ModificationFunctionMapping 요소는 EntityTypeMapping 요소 또는 AssociationSetMapping 요소의 자식 요소가 될 수 있습니다.

ModificationFunctionMapping 요소는 다음 자식 요소를 포함할 수 있습니다.

  • DeleteFunction(0개 또는 1개)
  • InsertFunction(0개 또는 1개)
  • UpdateFunction(0개 또는 1개)

ModificationFunctionMapping 요소에 적용할 수 있는 특성은 없습니다.

예시

다음 예제에서는 School 모델의 People 엔터티 집합에 대한 엔터티 집합 매핑을 보여 줍니다. Person 엔터티 형식에 대한 열 매핑 외에도 Person 형식에 대한 삽입, 업데이트 및 삭제 함수 매핑을 보여 줍니다. 매핑되는 함수는 스토리지 모델에서 선언됩니다.

 <EntitySetMapping Name="People">
   <EntityTypeMapping TypeName="SchoolModel.Person">
     <MappingFragment StoreEntitySet="Person">
       <ScalarProperty Name="PersonID" ColumnName="PersonID" />
       <ScalarProperty Name="LastName" ColumnName="LastName" />
       <ScalarProperty Name="FirstName" ColumnName="FirstName" />
       <ScalarProperty Name="HireDate" ColumnName="HireDate" />
       <ScalarProperty Name="EnrollmentDate"
                       ColumnName="EnrollmentDate" />
     </MappingFragment>
 </EntityTypeMapping>
   <EntityTypeMapping TypeName="SchoolModel.Person">
     <ModificationFunctionMapping>
       <InsertFunction FunctionName="SchoolModel.Store.InsertPerson">
         <ScalarProperty Name="EnrollmentDate"
                         ParameterName="EnrollmentDate" />
         <ScalarProperty Name="HireDate" ParameterName="HireDate" />
         <ScalarProperty Name="FirstName" ParameterName="FirstName" />
         <ScalarProperty Name="LastName" ParameterName="LastName" />
         <ResultBinding Name="PersonID" ColumnName="NewPersonID" />
       </InsertFunction>
       <UpdateFunction FunctionName="SchoolModel.Store.UpdatePerson">
         <ScalarProperty Name="EnrollmentDate"
                         ParameterName="EnrollmentDate"
                         Version="Current" />
         <ScalarProperty Name="HireDate" ParameterName="HireDate"
                         Version="Current" />
         <ScalarProperty Name="FirstName" ParameterName="FirstName"
                         Version="Current" />
         <ScalarProperty Name="LastName" ParameterName="LastName"
                         Version="Current" />
         <ScalarProperty Name="PersonID" ParameterName="PersonID"
                         Version="Current" />
       </UpdateFunction>
       <DeleteFunction FunctionName="SchoolModel.Store.DeletePerson">
         <ScalarProperty Name="PersonID" ParameterName="PersonID" />
       </DeleteFunction>
     </ModificationFunctionMapping>
   </EntityTypeMapping>
 </EntitySetMapping>

예시

다음 예제에서는 School 모델의 CourseInstructor 연결 집합에 대한 연결 집합 매핑을 보여 줍니다. CourseInstructor 연결에 대한 열 매핑 외에도 CourseInstructor 연결에 대한 삽입 및 삭제 함수 매핑을 보여 줍니다. 매핑되는 함수는 스토리지 모델에서 선언됩니다.

 <AssociationSetMapping Name="CourseInstructor"
                        TypeName="SchoolModel.CourseInstructor"
                        StoreEntitySet="CourseInstructor">
   <EndProperty Name="Person">
     <ScalarProperty Name="PersonID" ColumnName="PersonID" />
   </EndProperty>
   <EndProperty Name="Course">
     <ScalarProperty Name="CourseID" ColumnName="CourseID" />
   </EndProperty>
   <ModificationFunctionMapping>
     <InsertFunction FunctionName="SchoolModel.Store.InsertCourseInstructor" >   
       <EndProperty Name="Course">
         <ScalarProperty Name="CourseID" ParameterName="courseId"/>
       </EndProperty>
       <EndProperty Name="Person">
         <ScalarProperty Name="PersonID" ParameterName="instructorId"/>
       </EndProperty>
     </InsertFunction>
     <DeleteFunction FunctionName="SchoolModel.Store.DeleteCourseInstructor">
       <EndProperty Name="Course">
         <ScalarProperty Name="CourseID" ParameterName="courseId"/>
       </EndProperty>
       <EndProperty Name="Person">
         <ScalarProperty Name="PersonID" ParameterName="instructorId"/>
       </EndProperty>
     </DeleteFunction>
   </ModificationFunctionMapping>
 </AssociationSetMapping>

 

 

QueryView 요소(MSL)

MSL(매핑 사양 언어)의 QueryView 요소는 개념적 모델의 엔터티 형식 또는 연결과 기본 데이터베이스 테이블 간의 읽기 전용 매핑을 정의합니다. 매핑은 스토리지 모델에 대해 평가되는 Entity SQL 쿼리를 사용하여 정의되며, 개념적 모델의 엔터티 또는 연결 측면에서 결과 집합을 표현합니다. 쿼리 뷰는 읽기 전용이므로 표준 업데이트 명령을 사용하여 쿼리 뷰에서 정의된 형식을 업데이트할 수 없습니다. 수정 함수를 사용하여 이러한 형식을 업데이트할 수 있습니다. 자세한 내용은 How to: Map Modification Functions to Stored Procedures(방법: 수정 함수를 저장 프로시저에 매핑)를 참조하세요.

참고 항목

QueryView 요소에서 GroupBy, 그룹 집계 또는 탐색 속성이 포함된 Entity SQL 식은 지원되지 않습니다.

 

QueryView 요소는 EntitySetMapping 요소 또는 AssociationSetMapping 요소의 자식 요소가 될 수 있습니다. 쿼리 뷰는 앞의 자식 요소의 경우 개념적 모델의 엔터티에 대한 읽기 전용 매핑을 정의하고, 뒤의 자식 요소의 경우 개념적 모델의 연결에 대한 읽기 전용 매핑을 정의합니다.

참고 항목

AssociationSetMapping 요소가 참조 제약 조건과의 연결 대상인 경우 AssociationSetMapping 요소는 무시됩니다. 자세한 내용은 ReferentialConstraint 요소(CSDL)를 참조하세요.

QueryView 요소는 어떠한 자식 요소도 포함할 수 없습니다.

적용 가능한 특성

다음 표에서는 QueryView 요소에 적용할 수 있는 특성에 대해 설명합니다.

특성 이름 필수
TypeName 아니요 쿼리 뷰에 의해 매핑되는 개념적 모델 형식의 이름입니다.

예시

다음 예제에서는 QueryView 요소를 EntitySetMapping 요소의 자식 요소로 표시하고 School 모델의 Department 엔터티 형식에 대한 쿼리 뷰 매핑을 정의합니다.

 <EntitySetMapping Name="Departments" >
   <QueryView>
     SELECT VALUE SchoolModel.Department(d.DepartmentID,
                                         d.Name,
                                         d.Budget,
                                         d.StartDate)
     FROM SchoolModelStoreContainer.Department AS d
     WHERE d.Budget > 150000
   </QueryView>
 </EntitySetMapping>

쿼리는 스토리지 모델에서 Department 형식 멤버의 하위 집합만 반환되므로 다음과 같이 School 모델의 Department 형식은 이 매핑을 기반으로 수정되었습니다.

 <EntityType Name="Department">
   <Key>
     <PropertyRef Name="DepartmentID" />
   </Key>
   <Property Type="Int32" Name="DepartmentID" Nullable="false" />
   <Property Type="String" Name="Name" Nullable="false"
             MaxLength="50" FixedLength="false" Unicode="true" />
   <Property Type="Decimal" Name="Budget" Nullable="false"
             Precision="19" Scale="4" />
   <Property Type="DateTime" Name="StartDate" Nullable="false" />
   <NavigationProperty Name="Courses"
                       Relationship="SchoolModel.FK_Course_Department"
                       FromRole="Department" ToRole="Course" />
 </EntityType>

예시

다음 예제에서는 QueryView 요소를 AssociationSetMapping 요소의 자식 요소로 표시하고 School 모델의 FK_Course_Department 연결에 대한 읽기 전용 매핑을 정의합니다.

 <EntityContainerMapping StorageEntityContainer="SchoolModelStoreContainer"
                         CdmEntityContainer="SchoolEntities">
   <EntitySetMapping Name="Courses" >
     <QueryView>
       SELECT VALUE SchoolModel.Course(c.CourseID,
                                       c.Title,
                                       c.Credits)
       FROM SchoolModelStoreContainer.Course AS c
     </QueryView>
   </EntitySetMapping>
   <EntitySetMapping Name="Departments" >
     <QueryView>
       SELECT VALUE SchoolModel.Department(d.DepartmentID,
                                           d.Name,
                                           d.Budget,
                                           d.StartDate)
       FROM SchoolModelStoreContainer.Department AS d
       WHERE d.Budget > 150000
     </QueryView>
   </EntitySetMapping>
   <AssociationSetMapping Name="FK_Course_Department" >
     <QueryView>
       SELECT VALUE SchoolModel.FK_Course_Department(
         CREATEREF(SchoolEntities.Departments, row(c.DepartmentID), SchoolModel.Department),
         CREATEREF(SchoolEntities.Courses, row(c.CourseID)) )
       FROM SchoolModelStoreContainer.Course AS c
     </QueryView>
   </AssociationSetMapping>
 </EntityContainerMapping>

 

설명

다음 시나리오가 가능하도록 쿼리 뷰를 정의할 수 있습니다.

  • 스토리지 모델에 있는 엔터티의 모든 속성을 포함하지 않는 엔터티를 개념적 모델에서 정의합니다. 여기에는 기본값이 없고 null 값을 지원하지 않는 속성도 포함됩니다.
  • 스토리지 모델의 계산 열을 개념적 모델의 엔터티 형식 속성에 매핑합니다.
  • 개념적 모델의 엔터티를 분할하는 데 사용된 조건이 같음을 기반으로 하지 않는 매핑을 정의합니다. Condition 요소를 사용하여 조건부 매핑을 지정하는 경우 제공된 조건이 지정된 값과 같아야 합니다. 자세한 내용은 조건 요소(MSL)를 참조하세요.
  • 스토리지 모델의 같은 열을 개념적 모델의 여러 형식에 매핑합니다.
  • 여러 형식을 같은 테이블에 매핑합니다.
  • 관계형 스키마에서 외래 키를 기반으로 하지 않는 연결을 개념적 모델에서 정의합니다.
  • 사용자 지정 비즈니스 논리를 사용하여 개념적 모델에서 속성 값을 설정합니다. 예를 들어 데이터 원본의 문자열 값 ‘T’를 개념적 모델의 true 값(부울)에 매핑할 수 있습니다.
  • 쿼리 결과에 대한 조건부 필터를 정의합니다.
  • 스토리지 모델보다 더 적은 제한을 개념적 모델의 데이터에 대해 적용합니다. 예를 들어 매핑된 열에서 null 값을 지원하지 않아도 개념적 모델의 속성이 null을 허용하도록 만들 수 있습니다.

엔터티에 대한 쿼리 뷰를 정의할 때는 다음 사항을 고려해야 합니다.

  • 쿼리 뷰는 읽기 전용입니다. 수정 함수를 사용하여 엔터티를 업데이트할 수만 있습니다.
  • 쿼리 뷰로 엔터티 형식을 정의하는 경우 관련된 모든 엔터티도 쿼리 뷰로 정의해야 합니다.
  • 관계형 스키마의 링크 테이블을 나타내는 스토리지 모델의 엔터티에 다대다 연결을 매핑하는 경우 AssociationSetMapping 요소에 이 링크 테이블에 대한 QueryView 요소를 정의해야 합니다.
  • 쿼리 뷰는 형식 계층 구조의 모든 형식에 대해 정의되어야 합니다. 다음 방법으로 이 작업을 수행할 수 있습니다.
    • 계층 구조에 있는 모든 엔터티 형식의 공용 구조체를 반환하는 단일 Entity SQL 쿼리를 지정하는 단일 QueryView 요소를 사용합니다.
    • CASE 연산자를 사용하여 특정 조건에 따라 계층 구조의 특정 엔터티 형식을 반환하는 단일 Entity SQL 쿼리를 지정하는 단일 QueryView 요소를 사용합니다.
    • 계층 구조의 특정 형식에 대한 추가 QueryView 요소를 사용합니다. 이 경우 QueryView 요소의 TypeName 특성을 사용하여 각 뷰의 엔터티 형식을 지정합니다.
  • 쿼리 뷰가 정의되면 EntitySetMapping 요소에 StorageSetName 특성을 지정할 수 없습니다.
  • 쿼리 뷰가 정의되면 EntitySetMapping 요소에 Property 매핑도 포함할 수 없습니다.

ResultBinding 요소(MSL)

MSL(매핑 사양 언어)의 ResultBinding 요소는 엔터티 형식 수정 함수가 기본 데이터베이스의 저장 프로시저에 매핑되는 경우 저장 프로시저에서 반환되는 열 값을 개념적 모델의 엔터티 속성에 매핑합니다. 예를 들어, ID 열의 값이 삽입 저장 프로시저에서 반환되는 경우 ResultBinding 요소는 반환된 값을 개념적 모델의 엔터티 형식 속성에 매핑합니다.

ResultBinding 요소는 InsertFunction 요소 또는 UpdateFunction 요소의 자식 요소가 될 수 있습니다.

ResultBinding 요소는 어떠한 자식 요소도 포함할 수 없습니다.

적용 가능한 특성

다음 표에서는 ResultBinding 요소에 적용할 수 있는 특성에 대해 설명합니다.

특성 이름 필수
이름 매핑되는 개념적 모델의 엔터티 속성 이름입니다.
ColumnName 매핑되는 열의 이름입니다.

예시

다음 예제는 School 모델을 기반으로 하며 Person 엔터티 형식의 삽입 함수를 InsertPerson 저장 프로시저에 매핑하는 데 사용되는 InsertFunction 요소를 보여 줍니다. InsertPerson 저장 프로시저는 아래에 나와 있으며 스토리지 모델에서 선언됩니다. ResultBinding 요소는 저장 프로시저(NewPersonID)에서 반환되는 열 값을 엔터티 형식 속성(PersonID)에 매핑하는 데 사용됩니다.

 <EntityTypeMapping TypeName="SchoolModel.Person">
   <ModificationFunctionMapping>
     <InsertFunction FunctionName="SchoolModel.Store.InsertPerson">
       <ScalarProperty Name="EnrollmentDate"
                       ParameterName="EnrollmentDate" />
       <ScalarProperty Name="HireDate" ParameterName="HireDate" />
       <ScalarProperty Name="FirstName" ParameterName="FirstName" />
       <ScalarProperty Name="LastName" ParameterName="LastName" />
       <ResultBinding Name="PersonID" ColumnName="NewPersonID" />
     </InsertFunction>
     <UpdateFunction FunctionName="SchoolModel.Store.UpdatePerson">
       <ScalarProperty Name="EnrollmentDate"
                       ParameterName="EnrollmentDate"
                       Version="Current" />
       <ScalarProperty Name="HireDate" ParameterName="HireDate"
                       Version="Current" />
       <ScalarProperty Name="FirstName" ParameterName="FirstName"
                       Version="Current" />
       <ScalarProperty Name="LastName" ParameterName="LastName"
                       Version="Current" />
       <ScalarProperty Name="PersonID" ParameterName="PersonID"
                       Version="Current" />
     </UpdateFunction>
     <DeleteFunction FunctionName="SchoolModel.Store.DeletePerson">
       <ScalarProperty Name="PersonID" ParameterName="PersonID" />
     </DeleteFunction>
   </ModificationFunctionMapping>
 </EntityTypeMapping>

다음 Transact-SQL은 InsertPerson 저장 프로시저를 설명합니다.

 CREATE PROCEDURE [dbo].[InsertPerson]
                                @LastName nvarchar(50),
                                @FirstName nvarchar(50),
                                @HireDate datetime,
                                @EnrollmentDate datetime
                                AS
                                INSERT INTO dbo.Person (LastName,
                                                                             FirstName,
                                                                             HireDate,
                                                                             EnrollmentDate)
                                VALUES (@LastName,
                                               @FirstName,
                                               @HireDate,
                                               @EnrollmentDate);
                                SELECT SCOPE_IDENTITY() as NewPersonID;

ResultMapping 요소(MSL)

MSL(매핑 사양 언어)의 ResultMapping 요소는 다음과 같은 경우 개념적 모델의 함수 가져오기와 기본 데이터베이스의 저장 프로시저 간에 매핑을 정의합니다.

  • Function Import가 개념적 모델 엔터티 형식 또는 복합 형식을 반환하는 경우
  • 저장 프로시저에서 반환되는 열 이름이 엔터티 형식 또는 복합 형식의 속성 이름과 정확히 일치하지 않는 경우

기본적으로 저장 프로시저에서 반환되는 열과 엔터티 형식 또는 복합 형식 간의 매핑은 열 및 속성 이름을 기반으로 합니다. 열 이름이 속성 이름과 정확히 일치하지 않으면 ResultMapping 요소를 사용하여 매핑을 정의해야 합니다. 기본 매핑의 예제는 FunctionImportMapping 요소(MSL)를 참조하세요.

ResultMapping 요소는 FunctionImportMapping 요소의 자식 요소입니다.

ResultMapping 요소는 다음 자식 요소를 포함할 수 있습니다.

  • EntityTypeMapping(0개 이상)
  • ComplexTypeMapping

ResultMapping 요소에 적용할 수 있는 특성은 없습니다.

예시

다음과 같은 저장 프로시저가 있다고 가정합니다.

 CREATE PROCEDURE [dbo].[GetGrades]
             @student_Id int
             AS
             SELECT     EnrollmentID as enroll_id,
                                                                             Grade as grade,
                                                                             CourseID as course_id,
                                                                             StudentID as student_id
                                               FROM dbo.StudentGrade
             WHERE StudentID = @student_Id

또한 다음과 같은 개념적 모델 엔터티 형식이 있다고 가정합니다.

 <EntityType Name="StudentGrade">
   <Key>
     <PropertyRef Name="EnrollmentID" />
   </Key>
   <Property Name="EnrollmentID" Type="Int32" Nullable="false"
             annotation:StoreGeneratedPattern="Identity" />
   <Property Name="CourseID" Type="Int32" Nullable="false" />
   <Property Name="StudentID" Type="Int32" Nullable="false" />
   <Property Name="Grade" Type="Decimal" Precision="3" Scale="2" />
 </EntityType>

이전 엔터티 형식의 인스턴스를 반환하는 함수 가져오기를 만들려면 저장 프로시저에서 반환되는 열과 엔터티 형식 간의 매핑을 ResultMapping 요소에 정의해야 합니다.

 <FunctionImportMapping FunctionImportName="GetGrades"
                        FunctionName="SchoolModel.Store.GetGrades" >
   <ResultMapping>
     <EntityTypeMapping TypeName="SchoolModel.StudentGrade">
       <ScalarProperty Name="EnrollmentID" ColumnName="enroll_id"/>
       <ScalarProperty Name="CourseID" ColumnName="course_id"/>
       <ScalarProperty Name="StudentID" ColumnName="student_id"/>
       <ScalarProperty Name="Grade" ColumnName="grade"/>
     </EntityTypeMapping>
   </ResultMapping>
 </FunctionImportMapping>

ScalarProperty 요소(MSL)

MSL(매핑 사양 언어)의 ScalarProperty 요소는 개념적 모델의 엔터티 형식, 복합 형식 또는 연결의 속성을 기본 데이터베이스의 테이블 열 또는 저장 프로시저에 매핑합니다.

참고 항목

수정 함수가 매핑되는 저장 프로시저는 스토리지 모델에서 선언되어야 합니다. 자세한 내용은 Function 요소(SSDL)를 참조하세요.

ScalarProperty 요소는 다음 요소의 자식 요소가 될 수 있습니다.

  • MappingFragment
  • InsertFunction
  • UpdateFunction
  • DeleteFunction
  • EndProperty
  • ComplexProperty
  • ResultMapping

MappingFragment, ComplexProperty 또는 EndProperty 요소의 자식인 ScalarProperty 요소는 개념적 모델의 속성을 데이터베이스 열에 매핑합니다. InsertFunction, UpdateFunction 또는 DeleteFunction 요소의 자식인 ScalarProperty 요소는 개념적 모델의 속성을 저장 프로시저 매개 변수에 매핑합니다.

ScalarProperty 요소는 어떠한 자식 요소도 포함할 수 없습니다.

적용 가능한 특성

ScalarProperty 요소에 적용되는 특성은 해당 요소의 역할에 따라 달라집니다.

다음 표에서는 ScalarProperty 요소가 개념적 모델 속성을 데이터베이스 열에 매핑하는 데 사용될 경우 적용할 수 있는 특성을 설명합니다.

특성 이름 필수
이름 매핑되는 개념적 모델 속성의 이름입니다.
ColumnName 매핑되는 테이블 열의 이름입니다.

다음 표에서는 ScalarProperty 요소가 개념적 모델 속성을 저장 프로시저 매개 변수에 매핑하는 데 사용될 경우 적용할 수 있는 특성을 설명합니다.

특성 이름 필수
이름 매핑되는 개념적 모델 속성의 이름입니다.
ParameterName 매핑되는 매개 변수의 이름입니다.
버전 아니요 동시성 검사에 속성의 현재 값을 사용해야 하는 경우에는 Current, 원래 값을 사용해야 하는 경우에는 Original입니다.

예시

다음 예제에서는 다음 두 가지 방법으로 사용되는 ScalarProperty 요소를 보여 줍니다.

  • Person 엔터티 형식의 속성을 Person 테이블에 매핑합니다.
  • Person 엔터티 형식의 속성을 UpdatePerson 저장 프로시저의 매개 변수에 매핑합니다. 저장 프로시저는 스토리지 모델에서 선언해야 합니다.
 <EntitySetMapping Name="People">
   <EntityTypeMapping TypeName="SchoolModel.Person">
     <MappingFragment StoreEntitySet="Person">
       <ScalarProperty Name="PersonID" ColumnName="PersonID" />
       <ScalarProperty Name="LastName" ColumnName="LastName" />
       <ScalarProperty Name="FirstName" ColumnName="FirstName" />
       <ScalarProperty Name="HireDate" ColumnName="HireDate" />
       <ScalarProperty Name="EnrollmentDate"
                       ColumnName="EnrollmentDate" />
     </MappingFragment>
 </EntityTypeMapping>
   <EntityTypeMapping TypeName="SchoolModel.Person">
     <ModificationFunctionMapping>
       <InsertFunction FunctionName="SchoolModel.Store.InsertPerson">
         <ScalarProperty Name="EnrollmentDate"
                         ParameterName="EnrollmentDate" />
         <ScalarProperty Name="HireDate" ParameterName="HireDate" />
         <ScalarProperty Name="FirstName" ParameterName="FirstName" />
         <ScalarProperty Name="LastName" ParameterName="LastName" />
         <ResultBinding Name="PersonID" ColumnName="NewPersonID" />
       </InsertFunction>
       <UpdateFunction FunctionName="SchoolModel.Store.UpdatePerson">
         <ScalarProperty Name="EnrollmentDate"
                         ParameterName="EnrollmentDate"
                         Version="Current" />
         <ScalarProperty Name="HireDate" ParameterName="HireDate"
                         Version="Current" />
         <ScalarProperty Name="FirstName" ParameterName="FirstName"
                         Version="Current" />
         <ScalarProperty Name="LastName" ParameterName="LastName"
                         Version="Current" />
         <ScalarProperty Name="PersonID" ParameterName="PersonID"
                         Version="Current" />
       </UpdateFunction>
       <DeleteFunction FunctionName="SchoolModel.Store.DeletePerson">
         <ScalarProperty Name="PersonID" ParameterName="PersonID" />
       </DeleteFunction>
     </ModificationFunctionMapping>
   </EntityTypeMapping>
 </EntitySetMapping>

예시

다음 예제에서는 개념적 모델 연결의 삽입 및 삭제 함수를 데이터베이스의 저장 프로시저에 매핑하는 데 사용되는 ScalarProperty 요소를 보여 줍니다. 저장 프로시저는 스토리지 모델에서 선언해야 합니다.

 <AssociationSetMapping Name="CourseInstructor"
                        TypeName="SchoolModel.CourseInstructor"
                        StoreEntitySet="CourseInstructor">
   <EndProperty Name="Person">
     <ScalarProperty Name="PersonID" ColumnName="PersonID" />
   </EndProperty>
   <EndProperty Name="Course">
     <ScalarProperty Name="CourseID" ColumnName="CourseID" />
   </EndProperty>
   <ModificationFunctionMapping>
     <InsertFunction FunctionName="SchoolModel.Store.InsertCourseInstructor" >   
       <EndProperty Name="Course">
         <ScalarProperty Name="CourseID" ParameterName="courseId"/>
       </EndProperty>
       <EndProperty Name="Person">
         <ScalarProperty Name="PersonID" ParameterName="instructorId"/>
       </EndProperty>
     </InsertFunction>
     <DeleteFunction FunctionName="SchoolModel.Store.DeleteCourseInstructor">
       <EndProperty Name="Course">
         <ScalarProperty Name="CourseID" ParameterName="courseId"/>
       </EndProperty>
       <EndProperty Name="Person">
         <ScalarProperty Name="PersonID" ParameterName="instructorId"/>
       </EndProperty>
     </DeleteFunction>
   </ModificationFunctionMapping>
 </AssociationSetMapping>

UpdateFunction 요소(MSL)

MSL(매핑 사양 언어)의 UpdateFunction 요소는 개념적 모델의 엔터티 형식에 대한 업데이트 함수를 기본 데이터베이스의 저장 프로시저에 매핑합니다. 수정 함수가 매핑되는 저장 프로시저는 스토리지 모델에서 선언되어야 합니다. 자세한 내용은 Function 요소(SSDL)를 참조하세요.

참고 항목

엔터티 형식의 삽입, 업데이트 또는 삭제 작업을 모두 저장 프로시저에 매핑하지 않으면 런타임 시 실행되고 UpdateException이 throw될 경우 매핑되지 않은 작업이 실패합니다.

UpdateFunction 요소는 ModificationFunctionMapping 요소의 자식 요소가 될 수 있으며 EntityTypeMapping 요소에 적용될 수 있습니다.

UpdateFunction 요소는 다음 자식 요소를 포함할 수 있습니다.

  • AssociationEnd(0개 이상)
  • ComplexProperty(0개 이상)
  • ResultBinding(0개 또는 1개)
  • ScalarProperty(0개 이상)

적용 가능한 특성

다음 표에서는 UpdateFunction 요소에 적용할 수 있는 특성에 대해 설명합니다.

특성 이름 필수
FunctionName 업데이트 함수가 매핑되는 저장 프로시저의 네임스페이스로 한정된 이름입니다. 저장 프로시저는 스토리지 모델에서 선언해야 합니다.
RowsAffectedParameter 아니요 영향을 받는 행 수를 반환하는 출력 매개 변수의 이름입니다.

예시

다음 예제는 School 모델을 기반으로 하며, Person 엔터티 형식의 업데이트 함수를 UpdatePerson 저장 프로시저에 매핑하는 데 사용되는 UpdateFunction 요소를 보여 줍니다. UpdatePerson 저장 프로시저는 스토리지 모델에서 선언됩니다.

 <EntityTypeMapping TypeName="SchoolModel.Person">
   <ModificationFunctionMapping>
     <InsertFunction FunctionName="SchoolModel.Store.InsertPerson">
       <ScalarProperty Name="EnrollmentDate"
                       ParameterName="EnrollmentDate" />
       <ScalarProperty Name="HireDate" ParameterName="HireDate" />
       <ScalarProperty Name="FirstName" ParameterName="FirstName" />
       <ScalarProperty Name="LastName" ParameterName="LastName" />
       <ResultBinding Name="PersonID" ColumnName="NewPersonID" />
     </InsertFunction>
     <UpdateFunction FunctionName="SchoolModel.Store.UpdatePerson">
       <ScalarProperty Name="EnrollmentDate"
                       ParameterName="EnrollmentDate"
                       Version="Current" />
       <ScalarProperty Name="HireDate" ParameterName="HireDate"
                       Version="Current" />
       <ScalarProperty Name="FirstName" ParameterName="FirstName"
                       Version="Current" />
       <ScalarProperty Name="LastName" ParameterName="LastName"
                       Version="Current" />
       <ScalarProperty Name="PersonID" ParameterName="PersonID"
                       Version="Current" />
     </UpdateFunction>
     <DeleteFunction FunctionName="SchoolModel.Store.DeletePerson">
       <ScalarProperty Name="PersonID" ParameterName="PersonID" />
     </DeleteFunction>
   </ModificationFunctionMapping>
 </EntityTypeMapping>