Entity Framework 4 でユーザー定義関数を呼び出す 質問する

Entity Framework 4 でユーザー定義関数を呼び出す 質問する

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 を使用するケースです。

おすすめ記事