SQL Server 2005 データベースに、ビットを返すユーザー定義関数があります。この関数を Entity Framework 経由で呼び出したいのですが、いろいろ探しましたが、あまりうまくいきませんでした。
LINQ to SQL では、これは非常に簡単で、データ コンテキスト モデルに関数を追加するだけで、次のように呼び出すことができました。
bool result = FooContext.UserDefinedFunction(someParameter);
Entity Framework を使用してモデルに関数を追加すると、モデル ブラウザーの SomeModel.Store\Stored Procedures の下に表示されます。
モデルは関数のコードを生成していません。.edmx ファイルの XML には次の内容が含まれています。
<Function Name="UserDefinedFunction" ReturnType="bit" Aggregate="false" BuiltIn="false" NiladicFunction="false" IsComposable="true" ParameterTypeSemantics="AllowImplicitConversion" Schema="dbo">
<Parameter Name="someParameter" Type="int" Mode="In" />
</Function>
私が得た最も近いものは次のようなものでした:
bool result = ObjectContext.ExecuteFunction<bool>(
"UserDefinedFunction",
new ObjectParameter("someParameter", someParameter)
).First();
しかし、次のエラーメッセージが表示されました。
FunctionImport「UserDefinedFunction」がコンテナ「FooEntities」内に見つかりませんでした。
無実の人々を保護するために名前は変更されています。
要約: Entity Framework 4.0 を使用してスカラー値のユーザー定義関数を呼び出すにはどうすればよいでしょうか?
ベストアンサー1
ようやく解決しました :D スカラー関数の場合は、FROM {1} 句を追加できます。
bool result = FooContext.CreateQuery<bool>(
"SELECT VALUE FooModel.Store.UserDefinedFunction(@someParameter) FROM {1}",
new ObjectParameter("someParameter", someParameter)
).First();
これは間違いなく、EF ではなく LINQ to SQL を使用するケースです。