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が実行されます。
EntityFramework Plus:
これをすると、データが100件ある場合は、1個のSQLが実行されます。
因みに、トランザクションを使用しない場合、自動コミットされます。
(例外が出たら、自動ロールバックなのかな…?)(未検証)
検索用:Entity Framework Plus バッチ処理 一括処理 削除が遅い 更新が遅い 一括処理
遅いんじゃボケっ!
と言う訳で、バッチ処理できないかなーと探していたらありました。
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 バッチ処理 一括処理 削除が遅い 更新が遅い 一括処理
コメント
コメントを投稿