0

私はEntity Framework 4を使用しており、モデルには一連のストアドプロシージャがあります。現在、私たちは必要なすべてを行うことができます。しかし、我々は文字列を取り、最終的には結果セットを返すためにEntity Frameworkに動的ストアドプロシージャの列を認識させるにはどうすればいいですか

Create Procedure usp_RunSearch 
    @searchTerm VARCHAR(2000) 
AS 
BEGIN 
    DECLARE @sql VARCHAR(4000) 
    SET @sql = ' 
    SELECT ID, 
     NAME 
    FROM Users' 

    IF(ISNULL(@searchTerm, '') != '') 
    BEGIN 
    SET @sql = @sql + 'WHERE ' + @searchTerm 
    END 

    Exec (@sql) 
END 

のような処理を実行する新しい手順があります。

EFは結果の列リストを取得するためにこの手順を調べることができないようです。

EFがこの障害を乗り越えるためにできることはありますか?

答えて

0

最後に私はEDMXで手作業でComplexTypeを作成し、この手動で定義された複合型を使用するストアドプロシージャの関数インポートをセットアップしました。私は、EFがsprocを検査するとき、selectリストが私の例では比較的静的であるにもかかわらず、カラムの戻り値セットを特定できないと思います。

0

これを使用したい場合は、それを使用できます。 このリンクをチェックしてください。 http://blogs.msdn.com/b/adonet/archive/2011/02/04/using-dbcontext-in-ef-feature-ctp5-part-10-raw-sql-queries.aspx

Btwでは、ストアドプロシージャパラメータのデフォルト値を追加してみてください。

+0

これを試しましたが、デフォルトをnullに設定しました。私は、最良のソリューションは、私の複雑な型を作成し、それを関数のインポートにマップすることだと思います。これは単にsprocの返り値の列に対して複合型の定義を追跡しなければならないことを意味します。 –

+0

Btw、私はなぜあなたがそのspを必要としているのかわかりませんが、Dynamic Linqを探しているかもしれません。 Dynamiq Linqはそのようなspをほとんど必要としません。 Dynamic Linqがここにリンクされていることに気付かれていない場合に備えて、それは古くなっているかもしれません。 http://weblogs.asp.net/scottgu/archive/2008/01/07/dynamic-linq-part-1-using-the-linq-dynamic-query-library.aspx – hazimdikenli

関連する問題