9

これは簡単な答えかもしれませんが、EF CTP5でストアドプロシージャを実行する方法がわかりません。Entity Framework CTP5 - ストアドプロシージャを呼び出す方法

ExecuteFunction("ContainerName.StoredProcName", new ObjectParameter("Id", id))

Entity Frameworkの4.0では、我々はこれをしませんでした。

ObjectContextの方法はどれですか。

しかし、DbContextにはそのような方法はありません。

ストアドプロシージャを呼び出すにはどうすればよいですか? EF CTP5ではサポートされていませんか?

EDIT:あなたは今すぐに保存されたprodedureを呼び出している)

1:

var people = context.People.SqlQuery("EXECUTE [dbo].[GetAllPeople]"); 

これは、いくつかの懸念を提起:

私はあなたがこれを行う必要があると述べた、this threadを見つけましたと設定し、のコンテキストを設定しないでください。ストアドプロシージャは、特定のエンティティセットに縛られるのではなく、コンテキスト全体で使用できるようにする必要があります。ちょうど彼らが "テーブル"の下ではなくSQL Serverの "データベース"の下にあるように。

2)について複合タイプについてはどうですか?以前は、ストアドプロシージャから返される複合型がありました。しかし今、エンティティに直接マッピングする必要があるように見えますか?それは意味をなさない。 ObjectSet/DBSetで直接表現されていない型を返すprocsが多数格納されていますが、どのように引き出すことができないのか分かりません。

これまで私が理解していることから、私はCTP5にアップグレードすることができないため、誰かが私にこの問題を解決したいと考えています。

答えて

9

あなたは私が私の質問に私の編集に入れまさにあるこの

using(var context = new MyContext()) 
{ 
    // custum sql statement 
    var c = context.Database.SqlQuery<int>("SELECT COUNT(*) FROM Employees"); 

    // returned entity type doesn't have to be represented by ObjectSet/DBSet 
    var e = context.Database.SqlQuery<Employee>("SELECT * FROM Employees"); 

    // stored procedure 
    var q = context.Database.SqlQuery<Employee>("GetEmployees"); 
} 
+0

のようなデータベース全体のSQL文を実行することができます。 – RPM1984

+2

これはあなたの最初の懸念に答えるものです。 spはコンテキスト全体で利用可能です。 DbContext.Databaseは、組み込みのDbDatabaseオブジェクトへの参照です。これは、DbSetで動作するcontext.People.SqlQueryとは異なります。 –

+0

ああ、あなたの権利は、これを与えるとあなたに戻ってきます。 – RPM1984

関連する問題