如何在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部分中应用此代码。我收到错误'无法识别的架构元素功能'
答案 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元素,以定义自定义函数。