Entity Frameworkを使用してレコードを一括更新しようとしています。 Entity Framework.Extensions Update
メソッドを試しました。
Update
メソッドは、同じ更新値のセットを持つレコードのセットを一括更新できます。
例:
Id - Quantity
Record 1 - A - 10
Record 2 - B - 20
Record 3 - C - 30
上記のすべてのレコードを単純な呼び出しで一括更新できます
Records.Update(new => Record { Quantity = 100 });
Entityframework.Extensions
を使用して、または一括更新をより速く完了する他の方法で、異なる数量で各レコードを一括更新するにはどうすればよいですか?
SQLステートメントを使用したくない場合は、Attachメソッドを使用して、最初に読み込むことなくエンティティを更新できます。
using (myDbEntities db = new myDbEntities())
{
try
{
//disable detection of changes to improve performance
db.Configuration.AutoDetectChangesEnabled = false;
//for all the entities to update...
MyObjectEntity entityToUpdate = new MyObjectEntity() {Id=123, Quantity=100};
db.MyObjectEntity.Attach(entityToUpdate);
//then perform the update
db.SaveChanges();
}
finally
{
//re-enable detection of changes
db.Configuration.AutoDetectChangesEnabled = true;
}
}
ExecuteSqlCommand
を使用します。
using (yourDbEntities db = new yourDbEntities())
{
db.Database.ExecuteSqlCommand("UPDATE YourTABLE SET Quantity = {0} WHERE Id = {1}", quantity, id);
}
または ExecuteStoreCommand
:
yourDbContext.ExecuteStoreCommand("UPDATE YourTABLE SET Quantity = {0} WHERE Id = {1}", quantity, id);
一括更新は、個別の拡張メソッドではなく、シンプルなEFを使用して3つのステップで実行できます。
これにより、複数の更新クエリが単一のバッチで送信されます。
いくつかのプロパティを変更するだけの場合は、この方法を使用します。
foreach (var vSelectedDok in doks)
{
//disable detection of changes to improve performance
vDal.Configuration.AutoDetectChangesEnabled = false;
vDal.Dokumente.Attach(vSelectedDok);
vDal.Entry(vSelectedDok).Property(x=>x.Status).IsModified=true;
vDal.Entry(vSelectedDok).Property(x => x.LastDateChanged).IsModified = true;
}
vDal.SaveChanges();