2

この状況が発生したとしましょう。ストアドプロシージャから取得したデータを使用して、エンティティの1つをフィルタリングする必要があります。

var results = from c in db.Customer
join p in db.GetSPResults() on c.Id equals p.Id
select c;

私のContextクラスで私はこれを手に入れました:

public ObjectResult<Example> GetSPResults()
{
    return (this as IObjectContextAdapter).ObjectContext.ExecuteFunction<Example>("Proc_Example");
}

これまでのところ、2つの問題が発生しています。

  1. コードがExcecuteFunction行に到達すると、InvalidOperationExceptionが発生します。

    FunctionImport'xxx'がコンテナ'xxx'に見つかりませんでした

  2. あなたたちが私がその問題を解決するのを手伝ってくれると仮定すると、そのように質問することは可能でしょうか?これらのストアドプロシージャの結果をコンテキストエンティティのように使用しますか?EFはそれを許可しないと思います。なぜなら、それはエンティティでも「一定の価値」でもないからです。

EF4.3を使用しています。

4

1 に答える 1

1

そのようなプロシージャを文字列として名前で呼び出す代わりに、それをエンティティ モデルにインポートできます。その後、DbContext でタイプ セーフ/厳密に型指定されたメソッドを直接呼び出すことができます。

基本的に、関数のインポートを実行する必要があります。例については、こちらを参照してください: Entity Framework でストアド プロシージャを使用する

更新: POCO / コード ファーストについては、こちらを参照してください: EF コード ファースト - ストアド プロシージャのマッピング

于 2012-11-27T21:28:40.073 に答える