在EF中调用用户定义的函数-我做错了什么

本文关键字:错了 什么 函数 EF 调用 用户 定义 | 更新日期: 2023-09-27 18:00:30

我在SQL server中声明了一个用户定义的函数。按照这里的说明,我将函数刷新到我的EDMX中(使用"从数据库更新模型"),结果是:

    <Function Name="uf_GradeToGradeFlag" Aggregate="false" BuiltIn="false" NiladicFunction="false" IsComposable="true" ParameterTypeSemantics="AllowImplicitConversion" Schema="dbo" ReturnType="smallint">
      <Parameter Name="grade" Type="smallint" Mode="In" />
    </Function>

然后我创建了一个静态方法:

   [EdmFunction("SchoolManagement.BL", "uf_GradeToGradeFlag")]
    public static short GradeToGradeFlag(short grade)
    {
        throw new NotSupportedException("Direct calls are not supported.");
    }

现在,当我在Linq-to-Entities调用中调用这个方法时,我得到:

System.NotSupportedException:无法将类型"MyDomain.ModelDefinedFunctions"上指定的方法"Int16 GradeToGradeFlag(Int16)"转换为LINQ to Entities存储表达式。

我怀疑问题出在EdmFunctionAttribute构造函数中的namespaceName参数上。但相关文件非常模糊。当您谈论SQL函数时,"名称空间"究竟是什么?

在EF中调用用户定义的函数-我做错了什么

在这里找到答案:

第一个属性参数是存储命名空间——您可以在Schema元素的edmx xml文件中找到它(查找namespace)。