ComplexTypeMapping 元素 (MSL)

以映射规范语言 (MSL) 表示的 ComplexTypeMapping 元素为 ResultMapping 元素的子元素,且当满足以下条件时,定义概念模型中的函数导入与基础数据库中的存储过程之间的映射:

  • 函数导入返回一个概念复杂类型。

  • 存储过程返回的列的名称与复杂类型的属性名称不完全匹配。

默认情况下,存储过程返回的列与复杂类型返回的列之间的映射基于列名称和属性名称。 如果列名称与属性名称不完全匹配,则必须使用 ComplexTypeMapping 元素定义映射。 有关默认映射的示例,请参见 FunctionImportMapping 元素 (MSL)

ComplexTypeMapping 元素可以具有以下子元素:

适用的特性

下表介绍适用于 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>

另请参见

概念

ScalarProperty 元素 (MSL)

其他资源

建模和映射(实体框架)
How to: Import a Stored Procedure
How to: Map a Function Import to a Complex Type