Entity framework 4 实体框架&x2B;优势数据库:UDFs

Entity framework 4 实体框架&x2B;优势数据库:UDFs,entity-framework-4,advantage-database-server,Entity Framework 4,Advantage Database Server,我正在使用VS2010、实体框架4.0和Advantage v。10在我的申请表中。我试图使我在Advantage DB中定义的UDF可用于我的应用程序代码。设计器在“从数据库更新模型”向导中的存储过程下并没有像我所期望的那样显示UDF。因此,我手动将UDF添加到SSDL中,如下所示: <Function Name="Test" ReturnType="numeric" Aggregate="false" BuiltIn="false" NiladicFunction="false

我正在使用VS2010、实体框架4.0和Advantage v。10在我的申请表中。我试图使我在Advantage DB中定义的UDF可用于我的应用程序代码。设计器在“从数据库更新模型”向导中的存储过程下并没有像我所期望的那样显示UDF。因此,我手动将UDF添加到SSDL中,如下所示:

    <Function Name="Test" ReturnType="numeric" Aggregate="false" BuiltIn="false" NiladicFunction="false" IsComposable="true" ParameterTypeSemantics="AllowImplicitConversion">
      <Parameter Name="PartID" Type="integer" Mode="In"/>
    </Function>
我可以在Linq to Entities语句中看到函数;但是,生成的SQL无效。使用ToTraceString,UDF调用如下所示:

    "namespace.Store"."Test"("Project3"."PartID") AS "C4"
这给了我以下错误:

System.Data.EntityCommandExecutionException:执行命令定义时出错。有关详细信息,请参见内部异常。-->Advantage.Data.Provider.AdsException:错误7200:AQE错误:状态=42000;NativeError=2117;[iAnywhere Solutions][Advantage SQL Engine]意外标记:不应分隔标量函数名

如果我在Advantage Data Architect中运行生成的SQL并更正函数名,则效果良好,如下所示:

     Test("Project3"."PartID") AS "C4"
是否有必要告诉实体框架生成正确的SQL?我是否在SSDL中定义函数时出错


提前谢谢。

看起来不错。我唯一建议的是将十进制数更改为可空,但我怀疑这会解决问题,因为这样您将看到不同的异常。值得一试。我以前确实讨论过这个函数


您需要将函数元素更改为具有
BuiltIn=“true”
。Advantage SQL语法中没有引用用户定义的函数。

我尝试了许多不同的属性组合,但我认为内置函数是指本机的系统DB函数。好东西!
     Test("Project3"."PartID") AS "C4"