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

时间:2015-06-29 12:16:13

标签: c# sql-server-2012 entity-framework-5 user-defined-functions

我在SQL server中声明了一个用户定义的函数。按照说明here我将该功能刷新到我的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:指定的方法&#39; Int16 GradeToGradeFlag(Int16)&#39;在类型&#39; MyDomain.ModelDefinedFunctions&#39;无法转换为LINQ to Entities存储表达式。

我怀疑问题出在EdmFunctionAttribute constructor中的namespaceName参数。但文档非常模糊。当您谈论SQL函数时,&#34;命名空间&#34;究竟是什么?

1 个答案:

答案 0 :(得分:1)

找到答案here

  

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