アプリケーションで VS2010、Entity Framework 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>
CLR メソッド スタブも追加しました。
[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 呼び出しは次のようになります。
"namespace.Store"."Test"("Project3"."PartID") AS "C4"
これにより、次のエラーが表示されます。
System.Data.EntityCommandExecutionException: コマンド定義の実行中にエラーが発生しました。詳細については、内部例外を参照してください。---> Advantage.Data.Provider.AdsException: エラー 7200: AQE エラー: 状態 = 42000; NativeError = 2117; [iAnywhere ソリューション][Advantage SQL Engine]予期しないトークン: スカラー関数名を区切ることはできません。
生成された SQL を Advantage Data Architect で実行し、関数名を次のように修正すると、問題なく動作します。
Test("Project3"."PartID") AS "C4"
Entity Frameworkに正しいSQLを生成するように指示する方法はありますか? SSDL の関数の定義に何か問題がありますか?
前もって感謝します。