MSL 规范MSL Specification

映射规范语言(MSL)是一种基于 XML 的语言,用于描述实体框架应用程序的概念模型和存储模型之间的映射。

在实体框架应用程序中,将在生成时从 msl 文件(用 MSL 编写)加载映射元数据。 实体框架在运行时使用映射元数据将针对概念模型的查询转换为特定于存储的命令。

Entity Framework Designer (EF 设计器)在设计时将映射信息存储在 .edmx 文件中。 在生成时,Entity Designer 使用 .edmx 文件中的信息创建实体框架在运行时所需的 msl 文件

MSL 中引用的所有概念模型类型或存储模型类型的名称必须由其各自的命名空间名称限定。 有关概念模型命名空间名称的信息,请参阅CSDL 规范。 有关存储模型命名空间名称的信息,请参阅SSDL 规范

MSL 版本由 XML 命名空间进行区分。

MSL 版本XML 命名空间
MSL v1urn:架构-microsoft-com: windows: storage:映射: CS
MSL v2https://schemas.microsoft.com/ado/2008/09/mapping/cs
MSL v3https://schemas.microsoft.com/ado/2009/11/mapping/cs

Alias 元素 (MSL)Alias Element (MSL)

映射规范语言(MSL)中的Alias元素是映射元素的子元素,用于定义概念模型和存储模型命名空间的别名。 MSL 中引用的所有概念模型类型或存储模型类型的名称必须由其各自的命名空间名称限定。 有关概念模型命名空间名称的信息,请参阅 Schema 元素(CSDL)。 有关存储模型命名空间名称的信息,请参阅 Schema 元素(SSDL)。

Alias元素不能有子元素。

适用的属性Applicable Attributes

下表描述了可应用于Alias元素的特性。

属性名称是否必需
Key特性指定的命名空间的别名。
元素的值为其别名的命名空间。

示例Example

下面的示例演示一个alias元素,该元素为在概念模型中定义的类型定义别名 c

  1. <Mapping Space="C-S"
  2. xmlns="https://schemas.microsoft.com/ado/2009/11/mapping/cs">
  3. <Alias Key="c" Value="SchoolModel"/>
  4. <EntityContainerMapping StorageEntityContainer="SchoolModelStoreContainer"
  5. CdmEntityContainer="SchoolModelEntities">
  6. <EntitySetMapping Name="Courses">
  7. <EntityTypeMapping TypeName="c.Course">
  8. <MappingFragment StoreEntitySet="Course">
  9. <ScalarProperty Name="CourseID" ColumnName="CourseID" />
  10. <ScalarProperty Name="Title" ColumnName="Title" />
  11. <ScalarProperty Name="Credits" ColumnName="Credits" />
  12. <ScalarProperty Name="DepartmentID" ColumnName="DepartmentID" />
  13. </MappingFragment>
  14. </EntityTypeMapping>
  15. </EntitySetMapping>
  16. <EntitySetMapping Name="Departments">
  17. <EntityTypeMapping TypeName="c.Department">
  18. <MappingFragment StoreEntitySet="Department">
  19. <ScalarProperty Name="DepartmentID" ColumnName="DepartmentID" />
  20. <ScalarProperty Name="Name" ColumnName="Name" />
  21. <ScalarProperty Name="Budget" ColumnName="Budget" />
  22. <ScalarProperty Name="StartDate" ColumnName="StartDate" />
  23. <ScalarProperty Name="Administrator" ColumnName="Administrator" />
  24. </MappingFragment>
  25. </EntityTypeMapping>
  26. </EntitySetMapping>
  27. </EntityContainerMapping>
  28. </Mapping>

AssociationEnd 元素 (MSL)AssociationEnd Element (MSL)

当概念模型中的实体类型的修改函数映射到基础数据库中的存储过程时,将使用映射规范语言(MSL)中的AssociationEnd元素。 如果修改存储过程所使用的参数的值保存在关联属性中,则AssociationEnd元素会将属性值映射到该参数。 有关更多信息,请参见下面的示例。

有关将实体类型的修改函数映射到存储过程的详细信息,请参阅 ModificationFunctionMapping 元素(MSL)和演练:将实体映射到存储过程。

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

  • ScalarProperty

适用的属性Applicable Attributes

下表描述了适用于AssociationEnd元素的特性。

属性名称是否必需
AssociationSet要映射的关联的名称。
From导航属性的FromRole属性的值,该属性对应于要映射的关联。 有关详细信息,请参阅 NavigationProperty 元素(CSDL)。
收件人导航属性的ToRole属性的值,该属性对应于要映射的关联。 有关详细信息,请参阅 NavigationProperty 元素(CSDL)。

示例Example

请考虑使用以下概念模型实体类型:

  1. <EntityType Name="Course">
  2. <Key>
  3. <PropertyRef Name="CourseID" />
  4. </Key>
  5. <Property Type="Int32" Name="CourseID" Nullable="false" />
  6. <Property Type="String" Name="Title" Nullable="false" MaxLength="100"
  7. FixedLength="false" Unicode="true" />
  8. <Property Type="Int32" Name="Credits" Nullable="false" />
  9. <NavigationProperty Name="Department"
  10. Relationship="SchoolModel.FK_Course_Department"
  11. FromRole="Course" ToRole="Department" />
  12. </EntityType>

另请考虑使用以下存储过程:

  1. CREATE PROCEDURE [dbo].[UpdateCourse]
  2. @CourseID int,
  3. @Title nvarchar(50),
  4. @Credits int,
  5. @DepartmentID int
  6. AS
  7. UPDATE Course SET Title=@Title,
  8. Credits=@Credits,
  9. DepartmentID=@DepartmentID
  10. WHERE CourseID=@CourseID;

若要将 Course 实体的更新函数映射到此存储过程,必须为DepartmentID参数提供一个值。 DepartmentID 的值与实体类型中的某个属性不对应;该值包含在独立的关联中,此关联的映射如下所示:

  1. <AssociationSetMapping Name="FK_Course_Department"
  2. TypeName="SchoolModel.FK_Course_Department"
  3. StoreEntitySet="Course">
  4. <EndProperty Name="Course">
  5. <ScalarProperty Name="CourseID" ColumnName="CourseID" />
  6. </EndProperty>
  7. <EndProperty Name="Department">
  8. <ScalarProperty Name="DepartmentID" ColumnName="DepartmentID" />
  9. </EndProperty>
  10. </AssociationSetMapping>

下面的代码演示了AssociationEnd元素,该元素用于将FK_课程_部门关联的DepartmentID属性映射到UpdateCourse存储过程(课程实体类型的更新函数映射到该存储过程):

  1. <EntitySetMapping Name="Courses">
  2. <EntityTypeMapping TypeName="SchoolModel.Course">
  3. <MappingFragment StoreEntitySet="Course">
  4. <ScalarProperty Name="Credits" ColumnName="Credits" />
  5. <ScalarProperty Name="Title" ColumnName="Title" />
  6. <ScalarProperty Name="CourseID" ColumnName="CourseID" />
  7. </MappingFragment>
  8. </EntityTypeMapping>
  9. <EntityTypeMapping TypeName="SchoolModel.Course">
  10. <ModificationFunctionMapping>
  11. <UpdateFunction FunctionName="SchoolModel.Store.UpdateCourse">
  12. <AssociationEnd AssociationSet="FK_Course_Department"
  13. From="Course" To="Department">
  14. <ScalarProperty Name="DepartmentID"
  15. ParameterName="DepartmentID"
  16. Version="Current" />
  17. </AssociationEnd>
  18. <ScalarProperty Name="Credits" ParameterName="Credits"
  19. Version="Current" />
  20. <ScalarProperty Name="Title" ParameterName="Title"
  21. Version="Current" />
  22. <ScalarProperty Name="CourseID" ParameterName="CourseID"
  23. Version="Current" />
  24. </UpdateFunction>
  25. </ModificationFunctionMapping>
  26. </EntityTypeMapping>
  27. </EntitySetMapping>

AssociationSetMapping 元素 (MSL)AssociationSetMapping Element (MSL)

映射规范语言(MSL)中的AssociationSetMapping元素定义概念模型中的关联与基础数据库中的表列之间的映射。

概念模型中的关联是一些属性表示基础数据库中的主键列和外键列的类型。 AssociationSetMapping元素使用两个 EndProperty 元素来定义关联类型属性与数据库中的列之间的映射。 您可以使用 Condition 元素对这些映射施加条件。 使用 ModificationFunctionMapping 元素将关联的插入、更新和删除函数映射到数据库中的存储过程。 通过在 QueryView 元素中使用实体 SQL 字符串,定义 association 和表列之间的只读映射。

备注

如果为概念模型中的关联定义了引用约束,则不需要将关联映射到AssociationSetMapping元素。 如果具有引用约束的关联存在AssociationSetMapping元素,则将忽略在AssociationSetMapping元素中定义的映射。 有关详细信息,请参阅 ReferentialConstraint 元素(CSDL)。

AssociationSetMapping元素可以具有以下子元素

  • QueryView (零个或一个)
  • EndProperty(零个或两个)
  • 条件(零个或多个)
  • ModificationFunctionMapping (零个或一个)

适用的属性Applicable Attributes

下表介绍可应用于AssociationSetMapping元素的特性。

属性名称是否必需
名称要映射的概念模型关联集的名称。
TypeName要映射的概念模型关联类型的命名空间限定的名称。
StoreEntitySet要映射的表的名称。

示例Example

下面的示例显示一个AssociationSetMapping元素,在该元素中,在概念模型中设置的FK_课程_部门关联将映射到数据库中的课程表。 在子EndProperty元素中指定关联类型属性与表列之间的映射。

  1. <AssociationSetMapping Name="FK_Course_Department"
  2. TypeName="SchoolModel.FK_Course_Department"
  3. StoreEntitySet="Course">
  4. <EndProperty Name="Department">
  5. <ScalarProperty Name="DepartmentID" ColumnName="DepartmentID" />
  6. </EndProperty>
  7. <EndProperty Name="Course">
  8. <ScalarProperty Name="CourseID" ColumnName="CourseID" />
  9. </EndProperty>
  10. </AssociationSetMapping>

ComplexProperty 元素 (MSL)ComplexProperty Element (MSL)

映射规范语言(MSL)中的ComplexProperty元素定义概念模型实体类型上的复杂类型属性与基础数据库中的表列之间的映射。 属性-列映射在子 ScalarProperty 元素中指定。

ComplexType属性元素可以具有以下子元素:

  • ScalarProperty (零个或多个)
  • ComplexProperty (零个或多个)
  • ComplextTypeMapping (零个或多个)
  • 条件(零个或多个)

适用的属性Applicable Attributes

下表描述了适用于ComplexProperty元素的属性:

属性名称是否必需
名称概念模型中要映射的实体类型的复杂属性的名称。
TypeName概念模型属性类型的命名空间限定名称。

示例Example

下面的示例基于 School 模型。 下面的复杂类型已添加到概念模型中:

  1. <ComplexType Name="FullName">
  2. <Property Type="String" Name="LastName"
  3. Nullable="false" MaxLength="50"
  4. FixedLength="false" Unicode="true" />
  5. <Property Type="String" Name="FirstName"
  6. Nullable="false" MaxLength="50"
  7. FixedLength="false" Unicode="true" />
  8. </ComplexType>

Person实体类型的LastNameFirstName属性已替换为一个复杂属性名称

  1. <EntityType Name="Person">
  2. <Key>
  3. <PropertyRef Name="PersonID" />
  4. </Key>
  5. <Property Name="PersonID" Type="Int32" Nullable="false"
  6. annotation:StoreGeneratedPattern="Identity" />
  7. <Property Name="HireDate" Type="DateTime" />
  8. <Property Name="EnrollmentDate" Type="DateTime" />
  9. <Property Name="Name" Type="SchoolModel.FullName" Nullable="false" />
  10. </EntityType>

以下 MSL 显示了用于将Name属性映射到基础数据库中的列的ComplexProperty元素:

  1. <EntitySetMapping Name="People">
  2. <EntityTypeMapping TypeName="SchoolModel.Person">
  3. <MappingFragment StoreEntitySet="Person">
  4. <ScalarProperty Name="PersonID" ColumnName="PersonID" />
  5. <ScalarProperty Name="HireDate" ColumnName="HireDate" />
  6. <ScalarProperty Name="EnrollmentDate" ColumnName="EnrollmentDate" />
  7. <ComplexProperty Name="Name" TypeName="SchoolModel.FullName">
  8. <ScalarProperty Name="FirstName" ColumnName="FirstName" />
  9. <ScalarProperty Name="LastName" ColumnName="LastName" />
  10. </ComplexProperty>
  11. </MappingFragment>
  12. </EntityTypeMapping>
  13. </EntitySetMapping>

ComplexTypeMapping 元素 (MSL)ComplexTypeMapping Element (MSL)

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

  • 函数导入返回一个概念复杂类型。
  • 存储过程返回的列的名称与复杂类型的属性名称不完全匹配。

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

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

  • ScalarProperty (零个或多个)

适用的属性Applicable Attributes

下表描述了适用于ComplexTypeMapping元素的特性。

属性名称是否必需
TypeName要映射的复杂类型的命名空间限定的名称。

示例Example

请思考以下存储过程:

  1. CREATE PROCEDURE [dbo].[GetGrades]
  2. @student_Id int
  3. AS
  4. SELECT EnrollmentID as enroll_id,
  5. Grade as grade,
  6. CourseID as course_id,
  7. StudentID as student_id
  8. FROM dbo.StudentGrade
  9. WHERE StudentID = @student_Id

另请考虑使用以下概念模型复杂类型:

  1. <ComplexType Name="GradeInfo">
  2. <Property Type="Int32" Name="EnrollmentID" Nullable="false" />
  3. <Property Type="Decimal" Name="Grade" Nullable="true"
  4. Precision="3" Scale="2" />
  5. <Property Type="Int32" Name="CourseID" Nullable="false" />
  6. <Property Type="Int32" Name="StudentID" Nullable="false" />
  7. </ComplexType>

为了创建返回以前复杂类型的实例的函数导入,必须在ComplexTypeMapping元素中定义存储过程返回的列与实体类型返回的列之间的映射:

  1. <FunctionImportMapping FunctionImportName="GetGrades"
  2. FunctionName="SchoolModel.Store.GetGrades" >
  3. <ResultMapping>
  4. <ComplexTypeMapping TypeName="SchoolModel.GradeInfo">
  5. <ScalarProperty Name="EnrollmentID" ColumnName="enroll_id"/>
  6. <ScalarProperty Name="CourseID" ColumnName="course_id"/>
  7. <ScalarProperty Name="StudentID" ColumnName="student_id"/>
  8. <ScalarProperty Name="Grade" ColumnName="grade"/>
  9. </ComplexTypeMapping>
  10. </ResultMapping>
  11. </FunctionImportMapping>

Condition 元素 (MSL)Condition Element (MSL)

映射规范语言(MSL)中的Condition元素对概念模型和基础数据库之间的映射施加条件。 如果满足子条件元素中指定的所有条件,则在 XML 节点内定义的映射将有效。 否则,该映射无效。 例如,如果 MappingFragment 元素包含一个或多个Condition子元素,则在满足子条件元素的所有条件时,在MappingFragment节点内定义的映射将有效。

每个条件可以应用于名称(概念模型实体属性的名称,由Name属性指定),也可以应用于columnname (数据库中列的名称,由ColumnName特性指定)。 设置Name属性时,将根据实体属性值检查条件。 设置ColumnName属性后,将根据列值检查条件。 只能在Condition元素中指定NameColumnName特性中的一个。

备注

如果在 FunctionImportMapping 元素中使用Condition元素,则仅Name属性不适用。

Condition元素可以是以下元素的子元素:

  • AssociationSetMapping
  • ComplexProperty
  • EntitySetMapping
  • MappingFragment
  • EntityTypeMapping

Condition元素不能有子元素。

适用的属性Applicable Attributes

下表描述了适用于Condition元素的属性:

属性名称是否必需
ColumnName表列的名称,其值用于计算条件。
IsNullTrueFalse 如果值为True ,列值为null,或者如果值为False且列值不为null,则条件为 true。 否则,条件为 False。
不能同时使用IsNullValue属性。
要与列值进行比较的值。 如果值不同,则该条件为 True。 否则,条件为 False。
不能同时使用IsNullValue属性。
名称概念模型实体属性的名称,其值用于计算条件。
如果在 FunctionImportMapping 元素中使用Condition元素,则此属性不适用。

示例Example

下面的示例将条件元素显示为MappingFragment元素的子元素。 当 “雇佣日期” 不为 Null 并且EnrollmentDate为 null 时,将在 SchoolModel类型与Person表的PersonID雇用日期列之间映射数据。 如果EnrollmentDate不为 Null 且雇佣日期为 null,则会在SchoolModel类型与Person表的PersonID注册列之间映射数据。

  1. <EntitySetMapping Name="People">
  2. <EntityTypeMapping TypeName="IsTypeOf(SchoolModel.Person)">
  3. <MappingFragment StoreEntitySet="Person">
  4. <ScalarProperty Name="PersonID" ColumnName="PersonID" />
  5. <ScalarProperty Name="FirstName" ColumnName="FirstName" />
  6. <ScalarProperty Name="LastName" ColumnName="LastName" />
  7. </MappingFragment>
  8. </EntityTypeMapping>
  9. <EntityTypeMapping TypeName="IsTypeOf(SchoolModel.Instructor)">
  10. <MappingFragment StoreEntitySet="Person">
  11. <ScalarProperty Name="PersonID" ColumnName="PersonID" />
  12. <ScalarProperty Name="HireDate" ColumnName="HireDate" />
  13. <Condition ColumnName="HireDate" IsNull="false" />
  14. <Condition ColumnName="EnrollmentDate" IsNull="true" />
  15. </MappingFragment>
  16. </EntityTypeMapping>
  17. <EntityTypeMapping TypeName="IsTypeOf(SchoolModel.Student)">
  18. <MappingFragment StoreEntitySet="Person">
  19. <ScalarProperty Name="PersonID" ColumnName="PersonID" />
  20. <ScalarProperty Name="EnrollmentDate"
  21. ColumnName="EnrollmentDate" />
  22. <Condition ColumnName="EnrollmentDate" IsNull="false" />
  23. <Condition ColumnName="HireDate" IsNull="true" />
  24. </MappingFragment>
  25. </EntityTypeMapping>
  26. </EntitySetMapping>

DeleteFunction 元素 (MSL)DeleteFunction Element (MSL)

映射规范语言(MSL)中的DeleteFunction元素将概念模型中的实体类型或关联的删除函数映射到基础数据库中的存储过程。 将修改函数映射到其中的存储过程必须在存储模型中声明。 有关详细信息,请参阅 Function 元素(SSDL)。

备注

如果没有将实体类型的所有三个插入、更新或删除操作映射到存储过程,则在运行时执行并引发 UpdateException 时,未映射的操作将失败。

应用于 EntityTypeMapping 的 DeleteFunctionDeleteFunction Applied to EntityTypeMapping

当应用于 EntityTypeMapping 元素时, DeleteFunction元素会将概念模型中的实体类型的删除函数映射到存储过程。

DeleteFunction元素在应用于EntityTypeMapping元素时可以具有以下子元素:

  • AssociationEnd (零个或多个)
  • ComplexProperty(零个或多个)
  • ScarlarProperty (零个或多个)

适用的属性Applicable Attributes

下表描述了可应用于EntityTypeMapping元素的DeleteFunction元素的特性。

属性名称是否必需
FunctionName删除函数要映射到的存储过程的命名空间限定名称。 存储过程必须在存储模型中声明。
RowsAffectedParameter返回受影响行数的输出参数的名称。

示例Example

下面的示例基于 School 模型,并显示将Person实体类型的 delete 函数映射到DeletePerson存储过程的DeleteFunction元素。 DeletePerson存储过程在存储模型中声明。

  1. <EntitySetMapping Name="People">
  2. <EntityTypeMapping TypeName="SchoolModel.Person">
  3. <MappingFragment StoreEntitySet="Person">
  4. <ScalarProperty Name="PersonID" ColumnName="PersonID" />
  5. <ScalarProperty Name="LastName" ColumnName="LastName" />
  6. <ScalarProperty Name="FirstName" ColumnName="FirstName" />
  7. <ScalarProperty Name="HireDate" ColumnName="HireDate" />
  8. <ScalarProperty Name="EnrollmentDate"
  9. ColumnName="EnrollmentDate" />
  10. </MappingFragment>
  11. </EntityTypeMapping>
  12. <EntityTypeMapping TypeName="SchoolModel.Person">
  13. <ModificationFunctionMapping>
  14. <InsertFunction FunctionName="SchoolModel.Store.InsertPerson">
  15. <ScalarProperty Name="EnrollmentDate"
  16. ParameterName="EnrollmentDate" />
  17. <ScalarProperty Name="HireDate" ParameterName="HireDate" />
  18. <ScalarProperty Name="FirstName" ParameterName="FirstName" />
  19. <ScalarProperty Name="LastName" ParameterName="LastName" />
  20. <ResultBinding Name="PersonID" ColumnName="NewPersonID" />
  21. </InsertFunction>
  22. <UpdateFunction FunctionName="SchoolModel.Store.UpdatePerson">
  23. <ScalarProperty Name="EnrollmentDate"
  24. ParameterName="EnrollmentDate"
  25. Version="Current" />
  26. <ScalarProperty Name="HireDate" ParameterName="HireDate"
  27. Version="Current" />
  28. <ScalarProperty Name="FirstName" ParameterName="FirstName"
  29. Version="Current" />
  30. <ScalarProperty Name="LastName" ParameterName="LastName"
  31. Version="Current" />
  32. <ScalarProperty Name="PersonID" ParameterName="PersonID"
  33. Version="Current" />
  34. </UpdateFunction>
  35. <DeleteFunction FunctionName="SchoolModel.Store.DeletePerson">
  36. <ScalarProperty Name="PersonID" ParameterName="PersonID" />
  37. </DeleteFunction>
  38. </ModificationFunctionMapping>
  39. </EntityTypeMapping>
  40. </EntitySetMapping>

应用于 AssociationSetMapping 的 DeleteFunctionDeleteFunction Applied to AssociationSetMapping

当应用于 AssociationSetMapping 元素时, DeleteFunction元素会将概念模型中的关联的删除函数映射到存储过程。

DeleteFunction元素在应用于AssociationSetMapping元素时可以具有以下子元素:

  • EndProperty

适用的属性Applicable Attributes

下表描述了可应用于AssociationSetMapping元素的DeleteFunction元素的特性。

属性名称是否必需
FunctionName删除函数要映射到的存储过程的命名空间限定名称。 存储过程必须在存储模型中声明。
RowsAffectedParameter返回受影响行数的输出参数的名称。

示例Example

下面的示例基于 School 模型,并显示了用于将courseinstructor.courseid关联的删除函数映射到DeleteCourseInstructor存储过程的DeleteFunction元素。 DeleteCourseInstructor存储过程在存储模型中声明。

  1. <AssociationSetMapping Name="CourseInstructor"
  2. TypeName="SchoolModel.CourseInstructor"
  3. StoreEntitySet="CourseInstructor">
  4. <EndProperty Name="Person">
  5. <ScalarProperty Name="PersonID" ColumnName="PersonID" />
  6. </EndProperty>
  7. <EndProperty Name="Course">
  8. <ScalarProperty Name="CourseID" ColumnName="CourseID" />
  9. </EndProperty>
  10. <ModificationFunctionMapping>
  11. <InsertFunction FunctionName="SchoolModel.Store.InsertCourseInstructor" >
  12. <EndProperty Name="Course">
  13. <ScalarProperty Name="CourseID" ParameterName="courseId"/>
  14. </EndProperty>
  15. <EndProperty Name="Person">
  16. <ScalarProperty Name="PersonID" ParameterName="instructorId"/>
  17. </EndProperty>
  18. </InsertFunction>
  19. <DeleteFunction FunctionName="SchoolModel.Store.DeleteCourseInstructor">
  20. <EndProperty Name="Course">
  21. <ScalarProperty Name="CourseID" ParameterName="courseId"/>
  22. </EndProperty>
  23. <EndProperty Name="Person">
  24. <ScalarProperty Name="PersonID" ParameterName="instructorId"/>
  25. </EndProperty>
  26. </DeleteFunction>
  27. </ModificationFunctionMapping>
  28. </AssociationSetMapping>

EndProperty 元素 (MSL)EndProperty Element (MSL)

映射规范语言(MSL)中的EndProperty元素定义概念模型关联和基础数据库的结束或修改函数之间的映射。 属性-列映射在子 ScalarProperty 元素中指定。

当使用EndProperty元素定义概念模型关联末尾的映射时,它是 AssociationSetMapping 元素的子元素。 当使用EndProperty元素定义概念模型关联的修改函数的映射时,它是 InsertFunction 元素或 DeleteFunction 元素的子元素。

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

  • ScalarProperty (零个或多个)

适用的属性Applicable Attributes

下表描述了适用于EndProperty元素的属性:

属性名称是否必需
名称要映射的关联端的名称。

示例Example

下面的示例显示一个AssociationSetMapping元素,在该元素中,概念模型中的FK_课程_部门关联映射到数据库中的课程表。 在子EndProperty元素中指定关联类型属性与表列之间的映射。

  1. <AssociationSetMapping Name="FK_Course_Department"
  2. TypeName="SchoolModel.FK_Course_Department"
  3. StoreEntitySet="Course">
  4. <EndProperty Name="Department">
  5. <ScalarProperty Name="DepartmentID" ColumnName="DepartmentID" />
  6. </EndProperty>
  7. <EndProperty Name="Course">
  8. <ScalarProperty Name="CourseID" ColumnName="CourseID" />
  9. </EndProperty>
  10. </AssociationSetMapping>

示例Example

下面的示例显示了EndProperty元素,该元素将关联(courseinstructor.courseid)的插入和删除函数映射到基础数据库中的存储过程。 映射到的函数在存储模型中声明。

  1. <AssociationSetMapping Name="CourseInstructor"
  2. TypeName="SchoolModel.CourseInstructor"
  3. StoreEntitySet="CourseInstructor">
  4. <EndProperty Name="Person">
  5. <ScalarProperty Name="PersonID" ColumnName="PersonID" />
  6. </EndProperty>
  7. <EndProperty Name="Course">
  8. <ScalarProperty Name="CourseID" ColumnName="CourseID" />
  9. </EndProperty>
  10. <ModificationFunctionMapping>
  11. <InsertFunction FunctionName="SchoolModel.Store.InsertCourseInstructor" >
  12. <EndProperty Name="Course">
  13. <ScalarProperty Name="CourseID" ParameterName="courseId"/>
  14. </EndProperty>
  15. <EndProperty Name="Person">
  16. <ScalarProperty Name="PersonID" ParameterName="instructorId"/>
  17. </EndProperty>
  18. </InsertFunction>
  19. <DeleteFunction FunctionName="SchoolModel.Store.DeleteCourseInstructor">
  20. <EndProperty Name="Course">
  21. <ScalarProperty Name="CourseID" ParameterName="courseId"/>
  22. </EndProperty>
  23. <EndProperty Name="Person">
  24. <ScalarProperty Name="PersonID" ParameterName="instructorId"/>
  25. </EndProperty>
  26. </DeleteFunction>
  27. </ModificationFunctionMapping>
  28. </AssociationSetMapping>

EntityContainerMapping 元素 (MSL)EntityContainerMapping Element (MSL)

映射规范语言(MSL)中的EntityContainerMapping元素将概念模型中的实体容器映射到存储模型中的实体容器。 EntityContainerMapping元素是 Mapping 元素的子元素。

EntityContainerMapping元素可以具有以下子元素(按所列顺序):

  • EntitySetMapping(零个或多个)
  • AssociationSetMapping (零个或多个)
  • FunctionImportMapping (零个或多个)

适用的属性Applicable Attributes

下表介绍可应用于EntityContainerMapping元素的特性。

属性名称是否必需
StorageModelContainer要映射到的存储模型实体容器的名称。
CdmEntityContainer要映射的概念模型实体容器的名称。
GenerateUpdateViewsTrueFalse 如果为 False,则不生成任何更新视图。 如果你具有只读映射,则此属性应设置为False ,因为数据可能无法成功往返。
默认值为 True

示例Example

下面的示例演示了一个EntityContainerMapping元素,该元素将SchoolModelEntities容器(概念模型实体容器)映射到SchoolModelStoreContainer容器(存储模型实体容器):

  1. <EntityContainerMapping StorageEntityContainer="SchoolModelStoreContainer"
  2. CdmEntityContainer="SchoolModelEntities">
  3. <EntitySetMapping Name="Courses">
  4. <EntityTypeMapping TypeName="c.Course">
  5. <MappingFragment StoreEntitySet="Course">
  6. <ScalarProperty Name="CourseID" ColumnName="CourseID" />
  7. <ScalarProperty Name="Title" ColumnName="Title" />
  8. <ScalarProperty Name="Credits" ColumnName="Credits" />
  9. <ScalarProperty Name="DepartmentID" ColumnName="DepartmentID" />
  10. </MappingFragment>
  11. </EntityTypeMapping>
  12. </EntitySetMapping>
  13. <EntitySetMapping Name="Departments">
  14. <EntityTypeMapping TypeName="c.Department">
  15. <MappingFragment StoreEntitySet="Department">
  16. <ScalarProperty Name="DepartmentID" ColumnName="DepartmentID" />
  17. <ScalarProperty Name="Name" ColumnName="Name" />
  18. <ScalarProperty Name="Budget" ColumnName="Budget" />
  19. <ScalarProperty Name="StartDate" ColumnName="StartDate" />
  20. <ScalarProperty Name="Administrator" ColumnName="Administrator" />
  21. </MappingFragment>
  22. </EntityTypeMapping>
  23. </EntitySetMapping>
  24. </EntityContainerMapping>

EntitySetMapping 元素 (MSL)EntitySetMapping Element (MSL)

映射规范语言(MSL)中的EntitySetMapping元素将概念模型实体集中的所有类型都映射到存储模型中的实体集。 概念模型中的实体集为同一类型(和派生类型)实体的实例的逻辑容器。 存储模型中的实体集表示基础数据库中的一个表或视图。 概念模型实体集由EntitySetMapping元素的Name特性的值指定。 映射到的表或视图由每个子 MappingFragment 元素或EntitySetMapping元素本身中的StoreEntitySet属性指定。

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

  • EntityTypeMapping(零个或多个)
  • QueryView (零个或一个)
  • MappingFragment (零个或多个)

适用的属性Applicable Attributes

下表介绍可应用于EntitySetMapping元素的特性。

属性名称是否必需
名称要映射的概念模型实体集的名称。
TypeName 1要映射的概念模型实体类型的名称。
StoreEntitySet 1要映射到的存储模型实体集的名称。
MakeColumnsDistinctTrueFalse ,具体取决于是否只返回不同的行。
如果此特性设置为True,则 EntityContainerMapping 元素的GenerateUpdateViews特性必须设置为False

1可以使用TypeNameStoreEntitySet特性替代 EntityTypeMapping 和 MappingFragment 子元素,以便将单个实体类型映射到单个表。

示例Example

下面的示例显示一个EntitySetMapping元素,该元素将概念模型的课程实体集中的三个类型(基类型和两个派生类型)映射到基础数据库中的三个不同表。 这些表由每个MappingFragment元素中的StoreEntitySet属性指定。

  1. <EntitySetMapping Name="Courses">
  2. <EntityTypeMapping TypeName="IsTypeOf(SchoolModel1.Course)">
  3. <MappingFragment StoreEntitySet="Course">
  4. <ScalarProperty Name="CourseID" ColumnName="CourseID" />
  5. <ScalarProperty Name="DepartmentID" ColumnName="DepartmentID" />
  6. <ScalarProperty Name="Credits" ColumnName="Credits" />
  7. <ScalarProperty Name="Title" ColumnName="Title" />
  8. </MappingFragment>
  9. </EntityTypeMapping>
  10. <EntityTypeMapping TypeName="IsTypeOf(SchoolModel1.OnlineCourse)">
  11. <MappingFragment StoreEntitySet="OnlineCourse">
  12. <ScalarProperty Name="CourseID" ColumnName="CourseID" />
  13. <ScalarProperty Name="URL" ColumnName="URL" />
  14. </MappingFragment>
  15. </EntityTypeMapping>
  16. <EntityTypeMapping TypeName="IsTypeOf(SchoolModel1.OnsiteCourse)">
  17. <MappingFragment StoreEntitySet="OnsiteCourse">
  18. <ScalarProperty Name="CourseID" ColumnName="CourseID" />
  19. <ScalarProperty Name="Time" ColumnName="Time" />
  20. <ScalarProperty Name="Days" ColumnName="Days" />
  21. <ScalarProperty Name="Location" ColumnName="Location" />
  22. </MappingFragment>
  23. </EntityTypeMapping>
  24. </EntitySetMapping>

EntityTypeMapping 元素 (MSL)EntityTypeMapping Element (MSL)

映射规范语言(MSL)中的EntityTypeMapping元素定义概念模型中的实体类型与基础数据库中的表或视图之间的映射。 有关概念模型实体类型与基础数据库表或视图的信息,请参见 EntityType 元素 (CSDL) 和 EntitySet 元素 (SSDL)。 要映射的概念模型实体类型由EntityTypeMapping元素的TypeName特性指定。 要映射的表或视图由子 MappingFragment 元素的StoreEntitySet属性指定。

ModificationFunctionMapping 子元素可以用于将实体类型的插入、更新、或删除函数映射到数据库中的存储过程。

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

  • MappingFragment (零个或多个)
  • ModificationFunctionMapping (零个或一个)
  • ScalarProperty
  • 条件

备注

MappingFragmentModificationFunctionMapping元素不能同时是EntityTypeMapping元素的子元素。

备注

ScalarPropertyCondition元素在 FunctionImportMapping 元素中使用时,它们只能是EntityTypeMapping元素的子元素。

适用的属性Applicable Attributes

下表介绍可应用于EntityTypeMapping元素的特性。

属性名称是否必需
TypeName要映射的概念模型实体类型的命名空间限定的名称。
如果类型为抽象类型或派生类型,则值必须为 IsOfType(Namespace-qualified_type_name)

示例Example

下面的示例演示一个具有两个子EntityTypeMapping元素的 EntitySetMapping 元素。 在第一个EntityTypeMapping元素中, SchoolModel实体类型映射到person表。 在第二个EntityTypeMapping元素中, SchoolModel类型的更新功能映射到数据库中的存储过程UpdatePerson

  1. <EntitySetMapping Name="People">
  2. <EntityTypeMapping TypeName="SchoolModel.Person">
  3. <MappingFragment StoreEntitySet="Person">
  4. <ScalarProperty Name="PersonID" ColumnName="PersonID" />
  5. <ScalarProperty Name="LastName" ColumnName="LastName" />
  6. <ScalarProperty Name="FirstName" ColumnName="FirstName" />
  7. <ScalarProperty Name="HireDate" ColumnName="HireDate" />
  8. <ScalarProperty Name="EnrollmentDate" ColumnName="EnrollmentDate" />
  9. </MappingFragment>
  10. </EntityTypeMapping>
  11. <EntityTypeMapping TypeName="SchoolModel.Person">
  12. <ModificationFunctionMapping>
  13. <UpdateFunction FunctionName="SchoolModel.Store.UpdatePerson">
  14. <ScalarProperty Name="EnrollmentDate" ParameterName="EnrollmentDate"
  15. Version="Current" />
  16. <ScalarProperty Name="HireDate" ParameterName="HireDate"
  17. Version="Current" />
  18. <ScalarProperty Name="FirstName" ParameterName="FirstName"
  19. Version="Current" />
  20. <ScalarProperty Name="LastName" ParameterName="LastName"
  21. Version="Current" />
  22. <ScalarProperty Name="PersonID" ParameterName="PersonID"
  23. Version="Current" />
  24. </UpdateFunction>
  25. </ModificationFunctionMapping>
  26. </EntityTypeMapping>
  27. </EntitySetMapping>

示例Example

下一示例演示其中根类型为抽象类型的类型层次结构的映射。 请注意,将 IsOfType 语法用于TypeName特性。

  1. <EntitySetMapping Name="People">
  2. <EntityTypeMapping TypeName="IsTypeOf(SchoolModel.Person)">
  3. <MappingFragment StoreEntitySet="Person">
  4. <ScalarProperty Name="PersonID" ColumnName="PersonID" />
  5. <ScalarProperty Name="FirstName" ColumnName="FirstName" />
  6. <ScalarProperty Name="LastName" ColumnName="LastName" />
  7. </MappingFragment>
  8. </EntityTypeMapping>
  9. <EntityTypeMapping TypeName="IsTypeOf(SchoolModel.Instructor)">
  10. <MappingFragment StoreEntitySet="Person">
  11. <ScalarProperty Name="PersonID" ColumnName="PersonID" />
  12. <ScalarProperty Name="HireDate" ColumnName="HireDate" />
  13. <Condition ColumnName="HireDate" IsNull="false" />
  14. <Condition ColumnName="EnrollmentDate" IsNull="true" />
  15. </MappingFragment>
  16. </EntityTypeMapping>
  17. <EntityTypeMapping TypeName="IsTypeOf(SchoolModel.Student)">
  18. <MappingFragment StoreEntitySet="Person">
  19. <ScalarProperty Name="PersonID" ColumnName="PersonID" />
  20. <ScalarProperty Name="EnrollmentDate"
  21. ColumnName="EnrollmentDate" />
  22. <Condition ColumnName="EnrollmentDate" IsNull="false" />
  23. <Condition ColumnName="HireDate" IsNull="true" />
  24. </MappingFragment>
  25. </EntityTypeMapping>
  26. </EntitySetMapping>

FunctionImportMapping 元素 (MSL)FunctionImportMapping Element (MSL)

映射规范语言(MSL)中的FunctionImportMapping元素定义概念模型中的函数导入与基础数据库中的存储过程或函数之间的映射。 函数导入必须在概念模型中进行声明,存储的过程必须在存储模型中进行声明。 有关详细信息,请参阅 FunctionImport 元素(CSDL)和 Function 元素(SSDL)。

备注

默认情况下,如果函数导入返回概念模型实体类型或复杂类型,则基础存储过程返回的列名称必须与概念模型类型中的属性名称完全匹配。 如果列名称与属性名称不完全匹配,则必须在 ResultMapping 元素中定义映射。

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

  • ResultMapping (零个或多个)

适用的属性Applicable Attributes

下表描述了适用于FunctionImportMapping元素的属性:

属性名称是否必需
FunctionImportName概念模型中要映射的函数导入的名称。
FunctionName存储模型中要映射的函数的命名空间限定名称。

示例Example

下面的示例基于 School 模型。 请考虑在存储模型中使用以下函数:

  1. <Function Name="GetStudentGrades" Aggregate="false"
  2. BuiltIn="false" NiladicFunction="false"
  3. IsComposable="false" ParameterTypeSemantics="AllowImplicitConversion"
  4. Schema="dbo">
  5. <Parameter Name="StudentID" Type="int" Mode="In" />
  6. </Function>

另请考虑在概念模型中使用此函数导入:

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

下面的示例显示一个FunctionImportMapping元素,该元素用于将上述函数和函数导入映射到彼此:

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

InsertFunction 元素 (MSL)InsertFunction Element (MSL)

映射规范语言(MSL)中的InsertFunction元素将概念模型中的实体类型或关联的插入函数映射到基础数据库中的存储过程。 将修改函数映射到其中的存储过程必须在存储模型中声明。 有关详细信息,请参阅 Function 元素(SSDL)。

备注

如果没有将实体类型的所有三个插入、更新或删除操作映射到存储过程,则在运行时执行并引发 UpdateException 时,未映射的操作将失败。

InsertFunction元素可以是 ModificationFunctionMapping 元素的子元素,并应用于 EntityTypeMapping 元素或 AssociationSetMapping 元素。

应用于 EntityTypeMapping 的 InsertFunctionInsertFunction Applied to EntityTypeMapping

当应用于 EntityTypeMapping 元素时, InsertFunction元素会将概念模型中的实体类型的插入函数映射到存储过程。

InsertFunction元素在应用于EntityTypeMapping元素时可以具有以下子元素:

  • AssociationEnd (零个或多个)
  • ComplexProperty(零个或多个)
  • ResultBinding (零个或一个)
  • ScarlarProperty (零个或多个)

适用的属性Applicable Attributes

下表描述了应用于EntityTypeMapping元素时可应用于InsertFunction元素的特性。

属性名称是否必需
FunctionName插入函数要映射到的存储过程的命名空间限定名称。 存储过程必须在存储模型中声明。
RowsAffectedParameter返回受影响行数的输出参数的名称。

示例Example

下面的示例基于 School 模型,并显示了用于将 Person 实体类型的插入函数映射到InsertPerson存储过程的InsertFunction元素。 InsertPerson存储过程在存储模型中声明。

  1. <EntityTypeMapping TypeName="SchoolModel.Person">
  2. <ModificationFunctionMapping>
  3. <InsertFunction FunctionName="SchoolModel.Store.InsertPerson">
  4. <ScalarProperty Name="EnrollmentDate"
  5. ParameterName="EnrollmentDate" />
  6. <ScalarProperty Name="HireDate" ParameterName="HireDate" />
  7. <ScalarProperty Name="FirstName" ParameterName="FirstName" />
  8. <ScalarProperty Name="LastName" ParameterName="LastName" />
  9. <ResultBinding Name="PersonID" ColumnName="NewPersonID" />
  10. </InsertFunction>
  11. <UpdateFunction FunctionName="SchoolModel.Store.UpdatePerson">
  12. <ScalarProperty Name="EnrollmentDate"
  13. ParameterName="EnrollmentDate"
  14. Version="Current" />
  15. <ScalarProperty Name="HireDate" ParameterName="HireDate"
  16. Version="Current" />
  17. <ScalarProperty Name="FirstName" ParameterName="FirstName"
  18. Version="Current" />
  19. <ScalarProperty Name="LastName" ParameterName="LastName"
  20. Version="Current" />
  21. <ScalarProperty Name="PersonID" ParameterName="PersonID"
  22. Version="Current" />
  23. </UpdateFunction>
  24. <DeleteFunction FunctionName="SchoolModel.Store.DeletePerson">
  25. <ScalarProperty Name="PersonID" ParameterName="PersonID" />
  26. </DeleteFunction>
  27. </ModificationFunctionMapping>
  28. </EntityTypeMapping>

应用于 AssociationSetMapping 的 InsertFunctionInsertFunction Applied to AssociationSetMapping

当应用于 AssociationSetMapping 元素时, InsertFunction元素会将概念模型中的关联的插入函数映射到存储过程。

InsertFunction元素在应用于AssociationSetMapping元素时可以具有以下子元素:

  • EndProperty

适用的属性Applicable Attributes

下表描述了可应用于AssociationSetMapping元素的InsertFunction元素的特性。

属性名称是否必需
FunctionName插入函数要映射到的存储过程的命名空间限定名称。 存储过程必须在存储模型中声明。
RowsAffectedParameter返回受影响行数的输出参数的名称。

示例Example

下面的示例基于 School 模型,并显示了用于将courseinstructor.courseid关联的插入函数映射到InsertCourseInstructor存储过程的InsertFunction元素。 InsertCourseInstructor存储过程在存储模型中声明。

  1. <AssociationSetMapping Name="CourseInstructor"
  2. TypeName="SchoolModel.CourseInstructor"
  3. StoreEntitySet="CourseInstructor">
  4. <EndProperty Name="Person">
  5. <ScalarProperty Name="PersonID" ColumnName="PersonID" />
  6. </EndProperty>
  7. <EndProperty Name="Course">
  8. <ScalarProperty Name="CourseID" ColumnName="CourseID" />
  9. </EndProperty>
  10. <ModificationFunctionMapping>
  11. <InsertFunction FunctionName="SchoolModel.Store.InsertCourseInstructor" >
  12. <EndProperty Name="Course">
  13. <ScalarProperty Name="CourseID" ParameterName="courseId"/>
  14. </EndProperty>
  15. <EndProperty Name="Person">
  16. <ScalarProperty Name="PersonID" ParameterName="instructorId"/>
  17. </EndProperty>
  18. </InsertFunction>
  19. <DeleteFunction FunctionName="SchoolModel.Store.DeleteCourseInstructor">
  20. <EndProperty Name="Course">
  21. <ScalarProperty Name="CourseID" ParameterName="courseId"/>
  22. </EndProperty>
  23. <EndProperty Name="Person">
  24. <ScalarProperty Name="PersonID" ParameterName="instructorId"/>
  25. </EndProperty>
  26. </DeleteFunction>
  27. </ModificationFunctionMapping>
  28. </AssociationSetMapping>

Mapping 元素 (MSL)Mapping Element (MSL)

映射规范语言(MSL)中的mapping元素包含用于将概念模型中定义的对象映射到数据库的信息(如存储模型中所述)。 有关详细信息,请参阅 CSDL 规范和 SSDL 规范。

Mapping元素是映射规范的根元素。 https://schemas.microsoft.com/ado/2009/11/mapping/cs映射规范的 XML 命名空间。

映射元素可以具有以下子元素(按所列顺序):

  • 别名(0个或多个)
  • EntityContainerMapping (恰好一个)

MSL 中引用的概念模型类型和存储模型类型的名称必须由其相应的命名空间名称限定。 有关概念模型命名空间名称的信息,请参阅 Schema 元素(CSDL)。 有关存储模型命名空间名称的信息,请参阅 Schema 元素(SSDL)。 可以使用 Alias 元素定义 MSL 中使用的命名空间的别名。

适用的属性Applicable Attributes

下表描述了可应用到Mapping元素的特性。

属性名称是否必需
空格键C-S 这是固定值,因此不能更改。

示例Example

下面的示例演示一个基于 School 模型的一部分的映射元素。 有关 School 模型的详细信息,请参阅快速入门(实体框架):

  1. <Mapping Space="C-S"
  2. xmlns="https://schemas.microsoft.com/ado/2009/11/mapping/cs">
  3. <Alias Key="c" Value="SchoolModel"/>
  4. <EntityContainerMapping StorageEntityContainer="SchoolModelStoreContainer"
  5. CdmEntityContainer="SchoolModelEntities">
  6. <EntitySetMapping Name="Courses">
  7. <EntityTypeMapping TypeName="c.Course">
  8. <MappingFragment StoreEntitySet="Course">
  9. <ScalarProperty Name="CourseID" ColumnName="CourseID" />
  10. <ScalarProperty Name="Title" ColumnName="Title" />
  11. <ScalarProperty Name="Credits" ColumnName="Credits" />
  12. <ScalarProperty Name="DepartmentID" ColumnName="DepartmentID" />
  13. </MappingFragment>
  14. </EntityTypeMapping>
  15. </EntitySetMapping>
  16. <EntitySetMapping Name="Departments">
  17. <EntityTypeMapping TypeName="c.Department">
  18. <MappingFragment StoreEntitySet="Department">
  19. <ScalarProperty Name="DepartmentID" ColumnName="DepartmentID" />
  20. <ScalarProperty Name="Name" ColumnName="Name" />
  21. <ScalarProperty Name="Budget" ColumnName="Budget" />
  22. <ScalarProperty Name="StartDate" ColumnName="StartDate" />
  23. <ScalarProperty Name="Administrator" ColumnName="Administrator" />
  24. </MappingFragment>
  25. </EntityTypeMapping>
  26. </EntitySetMapping>
  27. </EntityContainerMapping>
  28. </Mapping>

MappingFragment 元素 (MSL)MappingFragment Element (MSL)

映射规范语言(MSL)中的MappingFragment元素定义概念模型实体类型的属性与数据库中的表或视图之间的映射。 有关概念模型实体类型与基础数据库表或视图的信息,请参见 EntityType 元素 (CSDL) 和 EntitySet 元素 (SSDL)。 MappingFragment可以是 EntityTypeMapping 元素或 EntitySetMapping 元素的子元素。

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

  • ComplexType (零个或多个)
  • ScalarProperty (零个或多个)
  • 条件(零个或多个)

适用的属性Applicable Attributes

下表介绍可应用于MappingFragment元素的特性。

属性名称是否必需
StoreEntitySet要映射的表或视图的名称。
MakeColumnsDistinctTrueFalse ,具体取决于是否只返回不同的行。
如果此特性设置为True,则 EntityContainerMapping 元素的GenerateUpdateViews特性必须设置为False

示例Example

下面的示例演示一个MappingFragment元素作为EntityTypeMapping元素的子元素。 在此示例中,概念模型中的课程类型的属性将映射到数据库中课程表的列。

  1. <EntitySetMapping Name="Courses">
  2. <EntityTypeMapping TypeName="SchoolModel.Course">
  3. <MappingFragment StoreEntitySet="Course">
  4. <ScalarProperty Name="CourseID" ColumnName="CourseID" />
  5. <ScalarProperty Name="Title" ColumnName="Title" />
  6. <ScalarProperty Name="Credits" ColumnName="Credits" />
  7. <ScalarProperty Name="DepartmentID" ColumnName="DepartmentID" />
  8. </MappingFragment>
  9. </EntityTypeMapping>
  10. </EntitySetMapping>

示例Example

下面的示例演示一个MappingFragment元素作为EntitySetMapping元素的子元素。 如上面的示例所示,概念模型中的课程类型的属性将映射到数据库中课程表的列。

  1. <EntitySetMapping Name="Courses" TypeName="SchoolModel.Course">
  2. <MappingFragment StoreEntitySet="Course">
  3. <ScalarProperty Name="CourseID" ColumnName="CourseID" />
  4. <ScalarProperty Name="Title" ColumnName="Title" />
  5. <ScalarProperty Name="Credits" ColumnName="Credits" />
  6. <ScalarProperty Name="DepartmentID" ColumnName="DepartmentID" />
  7. </MappingFragment>
  8. </EntitySetMapping>

ModificationFunctionMapping 元素 (MSL)ModificationFunctionMapping Element (MSL)

映射规范语言(MSL)中的ModificationFunctionMapping元素将概念模型实体类型的插入、更新和删除函数映射到基础数据库中的存储过程。 ModificationFunctionMapping元素还可以将概念模型中的多对多关联的插入和删除函数映射到基础数据库中的存储过程。 将修改函数映射到其中的存储过程必须在存储模型中声明。 有关详细信息,请参阅 Function 元素(SSDL)。

备注

如果没有将实体类型的所有三个插入、更新或删除操作映射到存储过程,则在运行时执行并引发 UpdateException 时,未映射的操作将失败。

备注

如果将继承层次结构中的一个实体的修改函数映射到存储过程,则必须将该层次结构中所有类型的修改函数都映射到存储过程。

ModificationFunctionMapping元素可以是 EntityTypeMapping 元素或 AssociationSetMapping 元素的子元素。

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

  • DeleteFunction (零个或一个)
  • InsertFunction (零个或一个)
  • UpdateFunction (零个或一个)

没有适用于ModificationFunctionMapping元素的特性。

示例Example

下面的示例演示了 School 模型中 “人员“ 实体集的实体集映射。 除了person实体类型的列映射外,还会显示 “人员“ 类型的插入、更新和删除函数的映射。 映射到的函数在存储模型中声明。

  1. <EntitySetMapping Name="People">
  2. <EntityTypeMapping TypeName="SchoolModel.Person">
  3. <MappingFragment StoreEntitySet="Person">
  4. <ScalarProperty Name="PersonID" ColumnName="PersonID" />
  5. <ScalarProperty Name="LastName" ColumnName="LastName" />
  6. <ScalarProperty Name="FirstName" ColumnName="FirstName" />
  7. <ScalarProperty Name="HireDate" ColumnName="HireDate" />
  8. <ScalarProperty Name="EnrollmentDate"
  9. ColumnName="EnrollmentDate" />
  10. </MappingFragment>
  11. </EntityTypeMapping>
  12. <EntityTypeMapping TypeName="SchoolModel.Person">
  13. <ModificationFunctionMapping>
  14. <InsertFunction FunctionName="SchoolModel.Store.InsertPerson">
  15. <ScalarProperty Name="EnrollmentDate"
  16. ParameterName="EnrollmentDate" />
  17. <ScalarProperty Name="HireDate" ParameterName="HireDate" />
  18. <ScalarProperty Name="FirstName" ParameterName="FirstName" />
  19. <ScalarProperty Name="LastName" ParameterName="LastName" />
  20. <ResultBinding Name="PersonID" ColumnName="NewPersonID" />
  21. </InsertFunction>
  22. <UpdateFunction FunctionName="SchoolModel.Store.UpdatePerson">
  23. <ScalarProperty Name="EnrollmentDate"
  24. ParameterName="EnrollmentDate"
  25. Version="Current" />
  26. <ScalarProperty Name="HireDate" ParameterName="HireDate"
  27. Version="Current" />
  28. <ScalarProperty Name="FirstName" ParameterName="FirstName"
  29. Version="Current" />
  30. <ScalarProperty Name="LastName" ParameterName="LastName"
  31. Version="Current" />
  32. <ScalarProperty Name="PersonID" ParameterName="PersonID"
  33. Version="Current" />
  34. </UpdateFunction>
  35. <DeleteFunction FunctionName="SchoolModel.Store.DeletePerson">
  36. <ScalarProperty Name="PersonID" ParameterName="PersonID" />
  37. </DeleteFunction>
  38. </ModificationFunctionMapping>
  39. </EntityTypeMapping>
  40. </EntitySetMapping>

示例Example

下面的示例演示了 School 模型中courseinstructor.courseid关联集的关联集映射。 除了courseinstructor.courseid关联的列映射外,还会显示courseinstructor.courseid关联的插入和删除函数的映射。 映射到的函数在存储模型中声明。

  1. <AssociationSetMapping Name="CourseInstructor"
  2. TypeName="SchoolModel.CourseInstructor"
  3. StoreEntitySet="CourseInstructor">
  4. <EndProperty Name="Person">
  5. <ScalarProperty Name="PersonID" ColumnName="PersonID" />
  6. </EndProperty>
  7. <EndProperty Name="Course">
  8. <ScalarProperty Name="CourseID" ColumnName="CourseID" />
  9. </EndProperty>
  10. <ModificationFunctionMapping>
  11. <InsertFunction FunctionName="SchoolModel.Store.InsertCourseInstructor" >
  12. <EndProperty Name="Course">
  13. <ScalarProperty Name="CourseID" ParameterName="courseId"/>
  14. </EndProperty>
  15. <EndProperty Name="Person">
  16. <ScalarProperty Name="PersonID" ParameterName="instructorId"/>
  17. </EndProperty>
  18. </InsertFunction>
  19. <DeleteFunction FunctionName="SchoolModel.Store.DeleteCourseInstructor">
  20. <EndProperty Name="Course">
  21. <ScalarProperty Name="CourseID" ParameterName="courseId"/>
  22. </EndProperty>
  23. <EndProperty Name="Person">
  24. <ScalarProperty Name="PersonID" ParameterName="instructorId"/>
  25. </EndProperty>
  26. </DeleteFunction>
  27. </ModificationFunctionMapping>
  28. </AssociationSetMapping>

QueryView 元素 (MSL)QueryView Element (MSL)

映射规范语言(MSL)中的QueryView元素定义概念模型中的实体类型或关联与基础数据库中的表之间的只读映射。 映射是使用针对存储模型计算的实体 SQL 查询定义的,你可以根据概念模型中的实体或关联来表示结果集。 因为查询视图是只读的,所以不能使用标准更新命令来更新查询视图所定义的类型。 可以使用修改函数来更新这些类型。 有关详细信息,请参阅如何:将修改函数映射到存储过程。

备注

QueryView元素中,不支持实体 SQL 包含GroupBy、组聚合或导航属性的表达式。

QueryView元素可以是 EntitySetMapping 元素或 AssociationSetMapping 元素的子元素。 在前一种情况中,查询视图定义概念模型中实体的只读映射。 在后一种情况中,查询视图定义概念模型中关联的只读映射。

备注

如果AssociationSetMapping元素用于与引用约束的关联,则忽略AssociationSetMapping元素。 有关详细信息,请参阅 ReferentialConstraint 元素(CSDL)。

QueryView元素不能具有任何子元素。

适用的属性Applicable Attributes

下表介绍可应用于QueryView元素的特性。

属性名称是否必需
TypeName要由查询视图映射的概念模型类型的名称。

示例Example

下面的示例将QueryView元素显示为EntitySetMapping元素的子元素,并为 School 模型中的部门实体类型定义查询视图映射。

  1. <EntitySetMapping Name="Departments" >
  2. <QueryView>
  3. SELECT VALUE SchoolModel.Department(d.DepartmentID,
  4. d.Name,
  5. d.Budget,
  6. d.StartDate)
  7. FROM SchoolModelStoreContainer.Department AS d
  8. WHERE d.Budget > 150000
  9. </QueryView>
  10. </EntitySetMapping>

由于该查询仅返回存储模型中 “部门“ 类型的成员子集,因此,School 模型中的部门类型已根据以下映射进行了修改:

  1. <EntityType Name="Department">
  2. <Key>
  3. <PropertyRef Name="DepartmentID" />
  4. </Key>
  5. <Property Type="Int32" Name="DepartmentID" Nullable="false" />
  6. <Property Type="String" Name="Name" Nullable="false"
  7. MaxLength="50" FixedLength="false" Unicode="true" />
  8. <Property Type="Decimal" Name="Budget" Nullable="false"
  9. Precision="19" Scale="4" />
  10. <Property Type="DateTime" Name="StartDate" Nullable="false" />
  11. <NavigationProperty Name="Courses"
  12. Relationship="SchoolModel.FK_Course_Department"
  13. FromRole="Department" ToRole="Course" />
  14. </EntityType>

示例Example

下一个示例显示了QueryView元素作为AssociationSetMapping元素的子元素,并为 School 模型中的 FK_Course_Department 关联定义了只读映射。

  1. <EntityContainerMapping StorageEntityContainer="SchoolModelStoreContainer"
  2. CdmEntityContainer="SchoolEntities">
  3. <EntitySetMapping Name="Courses" >
  4. <QueryView>
  5. SELECT VALUE SchoolModel.Course(c.CourseID,
  6. c.Title,
  7. c.Credits)
  8. FROM SchoolModelStoreContainer.Course AS c
  9. </QueryView>
  10. </EntitySetMapping>
  11. <EntitySetMapping Name="Departments" >
  12. <QueryView>
  13. SELECT VALUE SchoolModel.Department(d.DepartmentID,
  14. d.Name,
  15. d.Budget,
  16. d.StartDate)
  17. FROM SchoolModelStoreContainer.Department AS d
  18. WHERE d.Budget > 150000
  19. </QueryView>
  20. </EntitySetMapping>
  21. <AssociationSetMapping Name="FK_Course_Department" >
  22. <QueryView>
  23. SELECT VALUE SchoolModel.FK_Course_Department(
  24. CREATEREF(SchoolEntities.Departments, row(c.DepartmentID), SchoolModel.Department),
  25. CREATEREF(SchoolEntities.Courses, row(c.CourseID)) )
  26. FROM SchoolModelStoreContainer.Course AS c
  27. </QueryView>
  28. </AssociationSetMapping>
  29. </EntityContainerMapping>

CommentsComments

可以定义查询视图来实现以下方案:

  • 在概念模型中定义一个实体,该实体不包含存储模型中的实体的所有属性。 这包括没有默认值并且不支持null值的属性。
  • 将存储模型中计算的列映射到概念模型中实体类型的属性。
  • 定义一个映射,其中用于对概念模型中的实体进行分区的条件不基于相等性。 使用Condition元素指定条件映射时,所提供的条件必须等于指定的值。 有关详细信息,请参阅 Condition 元素(MSL)。
  • 将存储模型中的同一列映射到概念模型中的多个类型。
  • 将多个类型映射到同一个表。
  • 在概念模型中定义不基于关系架构中的外键的关联。
  • 使用自定义业务逻辑设置概念模型中的属性值。 例如,您可以将数据源中的字符串值 “T” 映射到概念模型中的true值(布尔值)。
  • 为查询结果定义条件筛选器。
  • 强制对概念模型中的数据施加比存储模型中更少的限制。 例如,您可以将概念模型中的属性设置为可以为 null,即使它映射到的列不支持null值。

为实体定义查询视图时需要考虑以下注意事项:

  • 查询视图是只读的。 只能使用修改函数来更新实体。
  • 通过查询视图定义实体类型时,必须也通过查询视图来定义所有相关实体。
  • 当您将多对多关联映射到存储模型中表示关系架构中的链接表的实体时,必须在此链接表的AssociationSetMapping元素中定义QueryView元素。
  • 必须为类型层次结构中的所有类型定义查询视图。 可以使用下列方式来实现:
    • 使用单个QueryView元素指定单个实体 SQL 查询,该查询返回层次结构中所有实体类型的联合。
    • 使用单个QueryView元素,该元素指定单个实体 SQL 查询,该查询使用 CASE 运算符根据特定条件返回层次结构中的特定实体类型。
    • 对于层次结构中的特定类型,使用额外的QueryView元素。 在这种情况下,请使用QueryView元素的TypeName特性来指定每个视图的实体类型。
  • 定义查询视图时,不能在EntitySetMapping元素上指定StorageSetName属性。
  • 定义查询视图时, EntitySetMapping元素不能同时包含属性映射。

ResultBinding 元素 (MSL)ResultBinding Element (MSL)

当实体类型修改函数映射到基础数据库中的存储过程时,映射规范语言(MSL)中的ResultBinding元素将存储过程返回的列值映射到概念模型中的实体属性。 例如,当 insert 存储过程返回标识列的值时, ResultBinding元素会将返回的值映射到概念模型中的实体类型属性。

ResultBinding元素可以是 InsertFunction 元素或 UpdateFunction 元素的子元素。

ResultBinding元素不能具有任何子元素。

适用的属性Applicable Attributes

下表描述了适用于ResultBinding元素的属性:

属性名称是否必需
名称概念模型中要映射的实体属性的名称。
ColumnName要映射的列的名称。

示例Example

下面的示例基于 School 模型,并显示用于将Person实体类型的插入函数映射到InsertPerson存储过程的InsertFunction元素。 ( InsertPerson存储过程如下所示,在存储模型中声明。)ResultBinding元素用于将存储过程(NewPersonID)返回的列值映射到实体类型属性(PersonID)。

  1. <EntityTypeMapping TypeName="SchoolModel.Person">
  2. <ModificationFunctionMapping>
  3. <InsertFunction FunctionName="SchoolModel.Store.InsertPerson">
  4. <ScalarProperty Name="EnrollmentDate"
  5. ParameterName="EnrollmentDate" />
  6. <ScalarProperty Name="HireDate" ParameterName="HireDate" />
  7. <ScalarProperty Name="FirstName" ParameterName="FirstName" />
  8. <ScalarProperty Name="LastName" ParameterName="LastName" />
  9. <ResultBinding Name="PersonID" ColumnName="NewPersonID" />
  10. </InsertFunction>
  11. <UpdateFunction FunctionName="SchoolModel.Store.UpdatePerson">
  12. <ScalarProperty Name="EnrollmentDate"
  13. ParameterName="EnrollmentDate"
  14. Version="Current" />
  15. <ScalarProperty Name="HireDate" ParameterName="HireDate"
  16. Version="Current" />
  17. <ScalarProperty Name="FirstName" ParameterName="FirstName"
  18. Version="Current" />
  19. <ScalarProperty Name="LastName" ParameterName="LastName"
  20. Version="Current" />
  21. <ScalarProperty Name="PersonID" ParameterName="PersonID"
  22. Version="Current" />
  23. </UpdateFunction>
  24. <DeleteFunction FunctionName="SchoolModel.Store.DeletePerson">
  25. <ScalarProperty Name="PersonID" ParameterName="PersonID" />
  26. </DeleteFunction>
  27. </ModificationFunctionMapping>
  28. </EntityTypeMapping>

以下 Transact-sql 介绍了InsertPerson存储过程:

  1. CREATE PROCEDURE [dbo].[InsertPerson]
  2. @LastName nvarchar(50),
  3. @FirstName nvarchar(50),
  4. @HireDate datetime,
  5. @EnrollmentDate datetime
  6. AS
  7. INSERT INTO dbo.Person (LastName,
  8. FirstName,
  9. HireDate,
  10. EnrollmentDate)
  11. VALUES (@LastName,
  12. @FirstName,
  13. @HireDate,
  14. @EnrollmentDate);
  15. SELECT SCOPE_IDENTITY() as NewPersonID;

ResultMapping 元素 (MSL)ResultMapping Element (MSL)

映射规范语言(MSL)中的ResultMapping元素定义概念模型中的函数导入与基础数据库中的存储过程之间的映射(如果满足以下条件):

  • 函数导入返回一个概念模型实体类型或复杂类型。
  • 存储过程返回的列的名称与实体类型或复杂类型中的属性名称不完全匹配。

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

ResultMapping元素是 FunctionImportMapping 元素的子元素。

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

  • EntityTypeMapping(零个或多个)
  • ComplexTypeMapping

没有适用于ResultMapping元素的特性。

示例Example

请思考以下存储过程:

  1. CREATE PROCEDURE [dbo].[GetGrades]
  2. @student_Id int
  3. AS
  4. SELECT EnrollmentID as enroll_id,
  5. Grade as grade,
  6. CourseID as course_id,
  7. StudentID as student_id
  8. FROM dbo.StudentGrade
  9. WHERE StudentID = @student_Id

另请考虑使用以下概念模型实体类型:

  1. <EntityType Name="StudentGrade">
  2. <Key>
  3. <PropertyRef Name="EnrollmentID" />
  4. </Key>
  5. <Property Name="EnrollmentID" Type="Int32" Nullable="false"
  6. annotation:StoreGeneratedPattern="Identity" />
  7. <Property Name="CourseID" Type="Int32" Nullable="false" />
  8. <Property Name="StudentID" Type="Int32" Nullable="false" />
  9. <Property Name="Grade" Type="Decimal" Precision="3" Scale="2" />
  10. </EntityType>

若要创建返回以前实体类型的实例的函数导入,必须在ResultMapping元素中定义存储过程返回的列与实体类型返回的列之间的映射:

  1. <FunctionImportMapping FunctionImportName="GetGrades"
  2. FunctionName="SchoolModel.Store.GetGrades" >
  3. <ResultMapping>
  4. <EntityTypeMapping TypeName="SchoolModel.StudentGrade">
  5. <ScalarProperty Name="EnrollmentID" ColumnName="enroll_id"/>
  6. <ScalarProperty Name="CourseID" ColumnName="course_id"/>
  7. <ScalarProperty Name="StudentID" ColumnName="student_id"/>
  8. <ScalarProperty Name="Grade" ColumnName="grade"/>
  9. </EntityTypeMapping>
  10. </ResultMapping>
  11. </FunctionImportMapping>

ScalarProperty 元素 (MSL)ScalarProperty Element (MSL)

映射规范语言(MSL)中的ScalarProperty元素将概念模型实体类型、复杂类型或关联的属性映射到基础数据库中的表列或存储过程参数。

备注

将修改函数映射到其中的存储过程必须在存储模型中声明。 有关详细信息,请参阅 Function 元素(SSDL)。

ScalarProperty元素可以是以下元素的子元素:

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

作为MappingFragmentComplexPropertyEndProperty元素的子元素, ScalarProperty元素会将概念模型中的属性映射到数据库中的某一列。 作为InsertFunctionUpdateFunctionDeleteFunction元素的子元素, ScalarProperty元素会将概念模型中的属性映射到存储过程参数。

ScalarProperty元素不能具有任何子元素。

适用的属性Applicable Attributes

应用于ScalarProperty元素的特性因元素的角色而异。

下表介绍了在ScalarProperty元素用于将概念模型属性映射到数据库中的列时适用的特性:

属性名称是否必需
名称要映射的概念模型属性的名称。
ColumnName要映射的表列的名称。

下表描述了当ScalarProperty元素用于将概念模型属性映射到存储过程参数时适用的特性:

属性名称是否必需
名称要映射的概念模型属性的名称。
ParameterName正在映射的参数的名称。
版本当前原始值,具体取决于是否应将当前值或属性的原始值用于并发检查。

示例Example

下面的示例演示了两种方法中使用的ScalarProperty元素:

  • person实体类型的属性映射到person表的列。
  • Person实体类型的属性映射到UpdatePerson存储过程的参数。 存储过程在存储模型中声明。
  1. <EntitySetMapping Name="People">
  2. <EntityTypeMapping TypeName="SchoolModel.Person">
  3. <MappingFragment StoreEntitySet="Person">
  4. <ScalarProperty Name="PersonID" ColumnName="PersonID" />
  5. <ScalarProperty Name="LastName" ColumnName="LastName" />
  6. <ScalarProperty Name="FirstName" ColumnName="FirstName" />
  7. <ScalarProperty Name="HireDate" ColumnName="HireDate" />
  8. <ScalarProperty Name="EnrollmentDate"
  9. ColumnName="EnrollmentDate" />
  10. </MappingFragment>
  11. </EntityTypeMapping>
  12. <EntityTypeMapping TypeName="SchoolModel.Person">
  13. <ModificationFunctionMapping>
  14. <InsertFunction FunctionName="SchoolModel.Store.InsertPerson">
  15. <ScalarProperty Name="EnrollmentDate"
  16. ParameterName="EnrollmentDate" />
  17. <ScalarProperty Name="HireDate" ParameterName="HireDate" />
  18. <ScalarProperty Name="FirstName" ParameterName="FirstName" />
  19. <ScalarProperty Name="LastName" ParameterName="LastName" />
  20. <ResultBinding Name="PersonID" ColumnName="NewPersonID" />
  21. </InsertFunction>
  22. <UpdateFunction FunctionName="SchoolModel.Store.UpdatePerson">
  23. <ScalarProperty Name="EnrollmentDate"
  24. ParameterName="EnrollmentDate"
  25. Version="Current" />
  26. <ScalarProperty Name="HireDate" ParameterName="HireDate"
  27. Version="Current" />
  28. <ScalarProperty Name="FirstName" ParameterName="FirstName"
  29. Version="Current" />
  30. <ScalarProperty Name="LastName" ParameterName="LastName"
  31. Version="Current" />
  32. <ScalarProperty Name="PersonID" ParameterName="PersonID"
  33. Version="Current" />
  34. </UpdateFunction>
  35. <DeleteFunction FunctionName="SchoolModel.Store.DeletePerson">
  36. <ScalarProperty Name="PersonID" ParameterName="PersonID" />
  37. </DeleteFunction>
  38. </ModificationFunctionMapping>
  39. </EntityTypeMapping>
  40. </EntitySetMapping>

示例Example

下一个示例显示了ScalarProperty元素,该元素用于将概念模型关联的插入和删除函数映射到数据库中的存储过程。 存储过程在存储模型中声明。

  1. <AssociationSetMapping Name="CourseInstructor"
  2. TypeName="SchoolModel.CourseInstructor"
  3. StoreEntitySet="CourseInstructor">
  4. <EndProperty Name="Person">
  5. <ScalarProperty Name="PersonID" ColumnName="PersonID" />
  6. </EndProperty>
  7. <EndProperty Name="Course">
  8. <ScalarProperty Name="CourseID" ColumnName="CourseID" />
  9. </EndProperty>
  10. <ModificationFunctionMapping>
  11. <InsertFunction FunctionName="SchoolModel.Store.InsertCourseInstructor" >
  12. <EndProperty Name="Course">
  13. <ScalarProperty Name="CourseID" ParameterName="courseId"/>
  14. </EndProperty>
  15. <EndProperty Name="Person">
  16. <ScalarProperty Name="PersonID" ParameterName="instructorId"/>
  17. </EndProperty>
  18. </InsertFunction>
  19. <DeleteFunction FunctionName="SchoolModel.Store.DeleteCourseInstructor">
  20. <EndProperty Name="Course">
  21. <ScalarProperty Name="CourseID" ParameterName="courseId"/>
  22. </EndProperty>
  23. <EndProperty Name="Person">
  24. <ScalarProperty Name="PersonID" ParameterName="instructorId"/>
  25. </EndProperty>
  26. </DeleteFunction>
  27. </ModificationFunctionMapping>
  28. </AssociationSetMapping>

UpdateFunction 元素 (MSL)UpdateFunction Element (MSL)

映射规范语言(MSL)中的UpdateFunction元素将概念模型中的实体类型的更新函数映射到基础数据库中的存储过程。 将修改函数映射到其中的存储过程必须在存储模型中声明。 有关详细信息,请参阅 Function 元素(SSDL)。

备注

如果没有将实体类型的所有三个插入、更新或删除操作映射到存储过程,则在运行时执行并引发 UpdateException 时,未映射的操作将失败。

UpdateFunction元素可以是 ModificationFunctionMapping 元素的子元素并应用于 EntityTypeMapping 元素。

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

  • AssociationEnd (零个或多个)
  • ComplexProperty(零个或多个)
  • ResultBinding (零个或一个)
  • ScarlarProperty (零个或多个)

适用的属性Applicable Attributes

下表介绍可应用于UpdateFunction元素的特性。

属性名称是否必需
FunctionName更新函数要映射到的存储过程的命名空间限定名称。 存储过程必须在存储模型中声明。
RowsAffectedParameter返回受影响行数的输出参数的名称。

示例Example

下面的示例基于 School 模型,并显示用于将Person实体类型的更新函数映射到UpdatePerson存储过程的UpdateFunction元素。 UpdatePerson存储过程在存储模型中声明。

  1. <EntityTypeMapping TypeName="SchoolModel.Person">
  2. <ModificationFunctionMapping>
  3. <InsertFunction FunctionName="SchoolModel.Store.InsertPerson">
  4. <ScalarProperty Name="EnrollmentDate"
  5. ParameterName="EnrollmentDate" />
  6. <ScalarProperty Name="HireDate" ParameterName="HireDate" />
  7. <ScalarProperty Name="FirstName" ParameterName="FirstName" />
  8. <ScalarProperty Name="LastName" ParameterName="LastName" />
  9. <ResultBinding Name="PersonID" ColumnName="NewPersonID" />
  10. </InsertFunction>
  11. <UpdateFunction FunctionName="SchoolModel.Store.UpdatePerson">
  12. <ScalarProperty Name="EnrollmentDate"
  13. ParameterName="EnrollmentDate"
  14. Version="Current" />
  15. <ScalarProperty Name="HireDate" ParameterName="HireDate"
  16. Version="Current" />
  17. <ScalarProperty Name="FirstName" ParameterName="FirstName"
  18. Version="Current" />
  19. <ScalarProperty Name="LastName" ParameterName="LastName"
  20. Version="Current" />
  21. <ScalarProperty Name="PersonID" ParameterName="PersonID"
  22. Version="Current" />
  23. </UpdateFunction>
  24. <DeleteFunction FunctionName="SchoolModel.Store.DeletePerson">
  25. <ScalarProperty Name="PersonID" ParameterName="PersonID" />
  26. </DeleteFunction>
  27. </ModificationFunctionMapping>
  28. </EntityTypeMapping>