如何:在存储模型中定义自定义函数(实体框架)
通过将包含 CommandText 元素的 Function 元素添加到 .edmx 文件的存储架构定义语言 (SSDL),可以在存储模型中定义自定义函数。 CommandText 元素通常用于提供类似于存储过程所提供的功能,但该存储过程是在 .edmx 文件中定义,而不是在数据库中定义。 在 CommandText 元素中可以定义任何 SQL 语句(包括参数化语句)。
注意: |
---|
如果您使用模型更新向导更新模型,则将覆盖按照下面过程的建议对 .edmx 文件的 SSDL 部分所做的更改。 |
在存储模型中定义自定义函数
以下过程假设已在 Visual Studio 的 XML 编辑器中打开 .edmx 文件。 该过程高度概括了在存储模型中添加自定义函数的信息。 后面的示例提供了有关该过程中各个步骤的更多详细信息。
在存储模型中定义自定义函数
在 .edmx 文件的存储模型内容部分的 Schema 元素中添加一个 Function 元素。
有关更多信息,请参见 Function Element (SSDL)和 Schema Element (SSDL)。
向新 Function 元素中添加一个 CommandText 元素。
在 CommandText 元素中定义一个 SQL 语句。
该语句可以是参数化语句。
对于 SQL 查询中的每个参数,向 Function 元素添加一个 Parameter 元素。 设置每个 Parameter 元素的 Name、Mode 和 Type 特性。
保存并关闭 .edmx 文件。
在 ADO.NET 实体数据模型设计器(实体设计器)中打开 .edmx 文件。
新添加的函数现在将作为存储过程显示在“模型浏览器”窗口中。
为该存储过程创建一个 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 上可用,必须在概念模型中创建一个相应的函数导入。 有关更多信息,请参见如何:导入存储过程(实体数据模型工具)。