具有实体框架的自定义功能

时间:2014-08-12 10:13:59

标签: c# linq-to-sql entity-framework-4.1

如何在Entity Framework中使用自定义函数? 我正在尝试使用Entity Framework调用模型定义的函数。我使用.Net Framework 4.5 我正在用XML打开实体模型(.edmx)文件。我在'edmx:StorageModels'部分中添加以下代码:

  <Function Name="YearsSinceNow" ReturnType="int">
    <Parameter Name="date" Type="datetime" />
    <DefiningExpression>
      Year(CurrentDateTime()) - Year(date)
    </DefiningExpression>
  </Function>

  </Schema></edmx:StorageModels>

我收到错误'无法识别的架构元素:定义表达式'。 此外,我试图在edmx:ConceptualModels部分中应用此代码。我收到错误'无法识别的架构元素功能'

1 个答案:

答案 0 :(得分:0)

尝试按如下方式更改定义(在概念模型中定义,而不是在存储模型中定义):

取自here

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

接下来,将以下方法添加到您的应用程序中,并使用EdmFunctionAttribute将其映射到概念模型函数,类似于:

[EdmFunction("MyModelName", "YearsSinceNow")]
public static int YearsSinceNow(DateTime date)
{
    throw new NotSupportedException("Direct calls are not supported.");
}

向应用程序添加公共语言运行时(CLR)方法,该方法映射到概念模型中定义的函数。要映射方法,必须将EdmFunctionAttribute应用于该方法。请注意,属性的NamespaceName和FunctionName参数分别是概念模型的命名空间名称和概念模型中的函数名称。 LINQ的函数名称解析区分大小写。

阅读How to: Define Custom Functions in the Conceptual Model (Entity Framework)

对于Function元素,您可以将其添加到.edmx文件的Conceptual Model Content部分中的Schema元素,以定义自定义函数。