在Entity Framework中定义自定义函数
本文介绍了如何在Entity Framework中定义自定义函数
引言
在 SDP 会议上,我被问到在 实体数据模型 中使用函数的问题。
本文将尝试回答一个这样的问题,即如何在 EF 中定义自定义函数。
Entity Framework 中的自定义函数
EF 的一项功能自 EF1 起就存在,即在模型的 SSDL 部分创建自定义函数。创建后,我们可以像其他导入的函数一样使用它们。 这样,我们就可以在模型中定义像存储过程一样运行的函数,但它们不是数据库的一部分。 当然,这意味着为了使用此功能,我们需要在 SSDL 中编写一些 XML 代码。
定义自定义函数
首先要做的是在 XML 编辑器中打开模型,并在 XML 的 SSDL 部分的 Schema
元素内添加一个 Function
元素。 在 Function
元素内部,我们添加一个 CommandText
元素,该元素将包含我们的 T-SQL 表达式。 我们可以向函数添加参数。
以下 XML 片段显示了一个自定义函数的示例
<Function Name="GetCoursesByCredit" IsComposable="false">
<CommandText>
SELECT *
FROM Course
WHERE Credits = @Credits
</CommandText>
<Parameter Name="Credits" Type="int" Mode="In">
</Parameter>
</Function>
创建该函数后,我们可以使用 添加函数导入 向导将该函数导入到 ObjectContext
然后运行像这样的测试来查看函数的效果
using (var context = new SchoolEntities())
{
var query = context.GetCoursesByCredit(3);
foreach (var course in query)
{
Console.WriteLine(course.Title);
}
Console.ReadLine();
}
摘要
EF 使我们能够将自定义 SSDL 函数添加到我们的模型中。 这些函数可以像其他导入的函数(UDF 或存储过程)一样处理。 我认为应该很少使用此功能,只有在我们需要但 EF 不支持的 T-SQL 功能时才使用。
历史
- 2010 年 7 月 26 日:初始发布