2017-03-10 9 views
1

私は現在、Microsoft Entity Frameworkを使用してdbを処理しています。私は、データベース内のあるテーブルのカラムをやや速くリセットする必要があります。私はこれをやっていますが、かなりの時間がかかり、ループ中にアプリケーションをブロックします。これは、現在のコードです:私は、それぞれの変化の速さを見るためにループ中にコンソールログによって確認されているSQLiteを使用してEntity Frameworkで複数のクエリを効率的に実行する方法はありますか?

using (var db = new DbContext()) 
{ 
    var userRepo = new UserRepository(db); 
    User[] users = userRepo.GetAll().ToArray(); 
    foreach (User user in users) 
    { 
     if (user.Money != 0) 
     { 
      user.Money = 0; 
      db.Set<User>().Update(user); 
      await db.SaveChangesAsync(); 
     } 
    } 
} 

、そしてそれは私が数百人のユーザーを持って考えると非常に遅いです。 Entity Frameworkで、ある列のすべてのデータを何かに設定するための通常のクエリを実行する方法はありますか?

+0

ループの後まで、あなたの呼び出しを 'SaveChanges'に移動することを考えましたか? –

+0

ああ、それはおそらく助けになるでしょう。しかし、将来の参照のために、エンティティフレームワークでカスタムクエリを呼び出す方法はありますか? –

+0

私はそう思うが、私はエキスパートではない。 –

答えて

0

@GertArnold氏のコメントによれば、EntityFramework.Extendedと呼ばれるサードパーティのライブラリがあり、特定の行のセットを更新するためにバッチを実行できます。あなたのケースでは、次のようになります。

db.Set<User>().Update(u=>new User{Money=0}); 
await db.SaveChangesAsync(); 

ちょうどこのnugetパッケージをインストールして、私は上記を示してコードを実行します。

関連する問題