3

Linq 2 エンティティに関する古い質問です。誰かが解決策を思いついた場合に備えて、もう一度質問します。

これを行うクエリを実行したい:

UPDATE dbo.Products WHERE Category = 1 SET Category = 5

そして、Entity Framework 4.3.1でそれをやりたいです。

これは単なる例です。1 つの列の値を変更するだけで、他には何もしたくないレコードがたくさんあります。Where(...).Select(...) を使用して DbContext に読み込み、すべての要素を変更してから、SaveChanges() を使用して保存すると、うまくいきません。

上記のように ExecuteCommand に固執し、直接クエリを送信する必要がありますか (もちろん、再利用可能にします)、または Linq 2 Entities / Fluent からそれを行う別の良い方法があります。

ありがとう!

4

5 に答える 5

1

あなたが説明していることは、Entity Frameworkでは実際には不可能です。いくつかのオプションがありますが、

  1. .ExecuteSqlCommand文字列として記述し、 (コンテキストで) EF 経由で実行できます。
  2. Entity Framework Extendedのようなものを使用できます(ただし、見たところ、これには優れたパフォーマンスがありません)。
于 2012-05-07T20:10:37.513 に答える
0

以下のように、最初にデータベースからフェッチせずにエンティティを更新できます

using (var context = new DBContext())
{
    context.YourEntitySet.Attach(yourExistingEntity);

    // Update fields

    context.SaveChanges();
}
于 2012-05-07T20:03:50.997 に答える
0

セットベースの操作がある場合は、EF よりも SQL の方が適しています。

したがって、はい - この場合、 に固執する必要がありExecuteCommandます。

于 2012-05-07T20:08:56.987 に答える
0

これがあなたに合っているかどうかはわかりませんが、更新を実行するストアド プロシージャを作成し、そのプロシージャを関数インポートとしてモデルに追加してみてください。次に、単一のデータベース呼び出しで更新を実行できます。

using(var dc = new YourDataContext())
{
    dc.UpdateProductsCategory(1, 5);
}

whereUpdateProductsCategoryは、インポートされたストアド プロシージャの名前になります。

于 2012-05-08T10:31:24.060 に答える