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

通过将包含 DefiningExpression 元素的 Function 元素添加到 .edmx 文件的概念架构定义语言 (CSDL),可以在概念模型中定义自定义函数。 在 CommandText 元素中可以定义任何实体 SQL 语句(包含参数化语句)。

有关更多信息,请参见 DefiningExpression (CSDL)User-Defined Functions (Entity SQL)

在概念模型中定义自定义函数

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

在概念模型中定义自定义函数

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

    Dd456812.note(zh-cn,VS.100).gif注意:
    必须使用 ReturnType 属性指定函数的返回类型。

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

  2. 对于函数接受的每个参数,请向 Function 元素添加一个 Parameter 元素。

    Dd456812.note(zh-cn,VS.100).gif注意:
    函数参数不是用前缀(例如 @)表示的,而是由定义函数的实体 SQL 表达式中的名称直接引用。选择与要在实体 SQL 表达式中使用的其他标识符不同的参数名称。

    有关更多信息,请参见 Parameter Element (CSDL)

  3. 向新 Function 元素中添加一个 DefiningExpression 元素。

  4. DefiningExpression 元素中定义一个实体 SQL 语句。

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

示例

下面是一个 Function 元素的示例,可以将该元素添加到 .edmx 文件的概念模型内容部分中的 Schema 元素以定义自定义函数。 将此 Function 元素添加到 School 模型可提供用于确定教师已聘用年数的功能。

有关 School 模型示例的信息,请参见Creating the School Sample DatabaseGenerating the School Entity Data Model

<Function Name="YearsSince" ReturnType="Edm.Int32">
  <Parameter Name="date" Type="Edm.DateTime" />
  <DefiningExpression>
    Year(CurrentDateTime()) - Year(date)
  </DefiningExpression>
</Function>

在概念模型中定义了函数后,即可从应用程序中的实体 SQL 查询内调用该函数。 有关从 LINQ to Entities 查询调用函数的信息,请参见How to: Call Functions Defined in the Conceptual Model

另请参见

任务

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

概念

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

其他资源

手动编辑 .edmx 文件(实体框架)
ADO.NET 实体数据模型工具
Calling Functions in LINQ to Entities