65.9K
CodeProject 正在变化。 阅读更多。
Home

在Entity Framework中定义自定义函数

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.47/5 (7投票s)

2010年7月26日

CPOL

1分钟阅读

viewsIcon

45918

本文介绍了如何在Entity Framework中定义自定义函数

引言

SDP 会议上,我被问到在 实体数据模型 中使用函数的问题。
本文将尝试回答一个这样的问题,即如何在 EF 中定义自定义函数。

Entity Framework 中的自定义函数

EF 的一项功能自 EF1 起就存在,即在模型的 SSDL 部分创建自定义函数。创建后,我们可以像其他导入的函数一样使用它们。 这样,我们就可以在模型中定义像存储过程一样运行的函数,但它们不是数据库的一部分。 当然,这意味着为了使用此功能,我们需要在 SSDL 中编写一些 XML 代码。

定义自定义函数

首先要做的是在 XML 编辑器中打开模型,并在 XMLSSDL 部分的 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

FunctionImport Wizard

然后运行像这样的测试来查看函数的效果

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 日:初始发布
© . All rights reserved.