9

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

Entity Framework 4.0 では、次のようにしました。

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

上のメソッドObjectContextです。

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

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

編集:

私はあなたがこれを行う必要があると述べているこのスレッドを見つけました:

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

これにより、いくつかの懸念が生じます。

1) contextではなくsetで保存された prodedure を呼び出すようになりました。ストアド プロシージャは、特定のエンティティ セットに関連付けられるのではなく、コンテキスト全体で使用できる必要があります。「テーブル」の下ではなく、SQL Server の「データベース」の下にあるのと同じように。

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

これまでのところ、私が理解していることから、CTP5にアップグレードできないため、誰かがこれを解決してくれることを願っています。

4

1 に答える 1

9

このようにデータベース全体のSQLステートメントを実行できます

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");
}
于 2011-01-25T16:06:10.293 に答える