2010-08-24 114 views
0

我在我的應用程序中使用VS2010,Entity Framework 4.0和Advantage v。10。我正在嘗試使我的Advantage DB中定義的UDF可用於我的應用程序代碼。設計師不會像我預期的那樣在「從數據庫更新模型」嚮導中的存儲過程中顯示UDF。所以我手動添加的UDF到SSDL如下:實體框架+優勢數據庫:UDF

<Function Name="Test" ReturnType="numeric" Aggregate="false" BuiltIn="false" NiladicFunction="false" IsComposable="true" ParameterTypeSemantics="AllowImplicitConversion"> 
     <Parameter Name="PartID" Type="integer" Mode="In"/> 
    </Function> 

我還添加了CLR方法存根:

[EdmFunction("namespace.Store", "Test")] 
    public static decimal Test(int partID) 
    { 
     throw new InvalidOperationException("Call from within an L2E query"); 
    } 

我可以看到在我的LINQ到實體聲明的功能;但是,生成的SQL無效。使用ToTraceString的UDF調用看起來是這樣的:

"namespace.Store"."Test"("Project3"."PartID") AS "C4" 

這給了我下面的錯誤:

System.Data.EntityCommandExecutionException:執行命令定義時出錯。詳情請參閱內部例外。 ---> Advantage.Data.Provider.AdsException:錯誤7200:AQE錯誤:狀態= 42000; NativeError = 2117; [iAnywhere解決方案] [優勢SQL引擎]意外的標記:不應分隔標量函數名稱。

如果我運行優勢Data Architect中生成的SQL和糾正功能名稱,像這樣它工作正常:

 Test("Project3"."PartID") AS "C4" 

反正有告訴實體框架生成正確的SQL?我在SSDL中的函數定義中做錯了什麼?

在此先感謝。

回答

0

你需要改變你的函數元素有BuiltIn="true"。用戶定義函數不在Advantage SQL語法中引用。

+0

我嘗試了很多屬性的不同組合,但我認爲BuiltIn意味着原生的系統DB功能。好東西! – user429994 2010-08-26 13:42:22