首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >实体框架+ advantage数据库:UDF

实体框架+ advantage数据库:UDF
EN

Stack Overflow用户
提问于 2010-08-25 04:55:21
回答 2查看 534关注 0票数 0

我在我的应用程序中使用VS2010、Entity Framework4.0和Advantage v10。我正在尝试使我在Advantage DB中定义的UDF可用于我的应用程序代码。designer并不像我所期望的那样,在"Update Model from Database“向导中的stored procs下显示UDF。因此,我手动将UDF添加到SSDL中,如下所示:

代码语言:javascript
复制
    <Function Name="Test" ReturnType="numeric" Aggregate="false" BuiltIn="false" NiladicFunction="false" IsComposable="true" ParameterTypeSemantics="AllowImplicitConversion">
      <Parameter Name="PartID" Type="integer" Mode="In"/>
    </Function>

我还添加了一个CLR方法存根:

代码语言:javascript
复制
    [EdmFunction("namespace.Store", "Test")]
    public static decimal Test(int partID)
    {
        throw new InvalidOperationException("Call from within an L2E query");
    }

我可以在Linq-to-Entities语句中看到这个函数;但是,生成的SQL是无效的。使用ToTraceString时,UDF调用如下所示:

代码语言:javascript
复制
    "namespace.Store"."Test"("Project3"."PartID") AS "C4"

这会给我以下错误:

System.Data.EntityCommandExecutionException:执行命令定义时出错。有关详细信息,请参阅内部异常。-> Advantage.Data.Provider.AdsException: Error 7200: AQE Error:状态= 42000;NativeError = 2117;iAnywhere SolutionsUnexpected token:标量函数名不能分隔。

如果我在Advantage Data Architect中运行生成的SQL并像这样更正函数名,它就可以正常工作:

代码语言:javascript
复制
     Test("Project3"."PartID") AS "C4"

有没有办法让Entity Framework生成正确的SQL?我是不是在SSDL中的函数定义中做错了什么?

提前谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-08-26 07:51:25

您需要将您的function元素更改为具有BuiltIn="true"。Advantage SQL语法中不包括用户定义的函数。

票数 0
EN

Stack Overflow用户

发布于 2010-08-25 15:15:26

看起来不错。我唯一建议的是将小数改为可空,但我怀疑这是否能解决问题,因为那样你会看到一个不同的异常。值得一试。我之前确实谈过这个函数。

http://weblogs.asp.net/zeeshanhirani/archive/2010/04/08/calling-user-defined-database-function-from-linq.aspx

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3560957

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档