如何:在存储模型中定义自定义函数(实体框架)

通过将包含 CommandText 元素的 Function 元素添加到 .edmx 文件的存储架构定义语言 (SSDL),可以在存储模型中定义自定义函数。 CommandText 元素通常用于提供类似于存储过程所提供的功能,但该存储过程是在 .edmx 文件中定义,而不是在数据库中定义。 在 CommandText 元素中可以定义任何 SQL 语句(包括参数化语句)。

Dd296754.note(zh-cn,VS.100).gif注意:
如果您使用模型更新向导更新模型,则将覆盖按照下面过程的建议对 .edmx 文件的 SSDL 部分所做的更改。

在存储模型中定义自定义函数

以下过程假设已在 Visual Studio 的 XML 编辑器中打开 .edmx 文件。 该过程高度概括了在存储模型中添加自定义函数的信息。 后面的示例提供了有关该过程中各个步骤的更多详细信息。

在存储模型中定义自定义函数

  1. 在 .edmx 文件的存储模型内容部分的 Schema 元素中添加一个 Function 元素。

    有关更多信息,请参见 Function Element (SSDL)Schema Element (SSDL)

  2. 向新 Function 元素中添加一个 CommandText 元素。

  3. CommandText 元素中定义一个 SQL 语句。

    该语句可以是参数化语句。

  4. 对于 SQL 查询中的每个参数,向 Function 元素添加一个 Parameter 元素。 设置每个 Parameter 元素的 NameModeType 特性。

  5. 保存并关闭 .edmx 文件。

  6. ADO.NET 实体数据模型设计器(实体设计器)中打开 .edmx 文件。

    新添加的函数现在将作为存储过程显示在“模型浏览器”窗口中。

  7. 为该存储过程创建一个 FunctionImport。 有关更多信息,请参见如何:导入存储过程(实体数据模型工具)

示例

下面是一个 Function 元素的示例,可以将该元素添加到 .edmx 文件的存储模型内容部分中的 Schema 元素以定义自定义函数。 将此 Function 元素添加到 School 模型可提供用于更新指定教师职责分配的功能。 有关 School 模型示例的信息,请参见Quickstart (Entity Framework)

<Function Name="UpdateOfficeAssignment" IsComposable="false">
  <CommandText>
    UPDATE OfficeAssignment
    SET Location = @location
    WHERE InstructorID = @id;
  </CommandText>
  <Parameter Name="location"
             Mode="In"
             Type="nvarchar"/>
  <Parameter Name="id"
             Mode="In"
             Type="int"/>
</Function>

若要使此函数在 ObjectContext 上可用,必须在概念模型中创建一个相应的函数导入。 有关更多信息,请参见如何:导入存储过程(实体数据模型工具)

另请参见

任务

如何:添加定义查询(实体框架)

概念

ADO.NET 实体数据模型设计器

其他资源

手动编辑 .edmx 文件(实体框架)
ADO.NET 实体数据模型工具