Entity Framework と バッチ処理

Entity Framework 削除等をする場合、キーで削除しようとしても削除データが100件ある場合、100個のSQLが実行されます
遅いんじゃボケっ!

と言う訳で、バッチ処理できないかなーと探していたらありました。

EntityFramework Plus
GithubURL : https://github.com/zzzprojects/EntityFramework-Plus
公式?サイト:http://entityframework-plus.net

これを使えば、100件あってもキーが同じなら1つのSQLで終わります。
更新の場合も早いようです。


ただしっ!
Entity Framework のトランザクション管理は使われない(SaveChangesメソッド)では出来ないので、
自分でトランザクション管理をしなければだめです…

面倒ですね。
こうなると、【Database.ExecuteSqlCommand(DELETE FROM XXXX WHERE XXXX=123)】とやるのとどっちが良いのだろう?
と思ってしまいます…
ま、楽な方で!

EntityFramework 標準:
これをすると、データが100件ある場合は、100個のSQLが実行されます。
Context.Entity.RemoveRange(Entity.Where(e => e.Id == 123));
Context.Entity.SaveChanges();


EntityFramework Plus:
これをすると、データが100件ある場合は、1個のSQLが実行されます。
using Z.EntityFramework.Plus;
…
using (MyContext con = new MyContext()) {
    using (var tran = con.Database.BeginTransaction()) {
        try { 
            con.Entity.Where(e => e.Id == 123).Delete();
            tran.Commit();
        }
        catch (Exception)
        {
            tran.Rollback();
        }
    }
}


因みに、トランザクションを使用しない場合、自動コミットされます。
(例外が出たら、自動ロールバックなのかな…?)(未検証)



検索用:Entity Framework Plus バッチ処理 一括処理 削除が遅い 更新が遅い 一括処理

コメント

このブログの人気の投稿

ヨドバシカメラの店舗購入履歴を見るには…

C# の WPF の DataGrid で 行を交互に背景色を変える+選択色を変える+カラムが無い所も変える…

Visual Studio の ホットリロードが動かない場合に確認するところ