我在我的應用程序中使用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中的函數定義中做錯了什麼?
在此先感謝。
我嘗試了很多屬性的不同組合,但我認爲BuiltIn意味着原生的系統DB功能。好東西! – user429994 2010-08-26 13:42:22