1. ホーム
  2. c#

[解決済み] DbSetの全要素を削除するには?

2023-05-13 10:30:33

質問

Entity Framework 4.3 で System.Data.Entity.DbSet のすべての要素を削除する最良の方法は何ですか。

どのように解決するのですか?

dbContext.Database.ExecuteSqlCommand("delete from MyTable");

(冗談抜きで)

問題は、EFはバッチコマンドをサポートしておらず、直接的なDMLを使用せずにセット内のすべてのエンティティを削除する唯一の方法であることです。

foreach (var entity in dbContext.MyEntities)
    dbContext.MyEntities.Remove(entity);
dbContext.SaveChanges();

あるいは、完全な実体を読み込まないようにするために、もう少し安くすることもできます。

foreach (var id in dbContext.MyEntities.Select(e => e.Id))
{
    var entity = new MyEntity { Id = id };
    dbContext.MyEntities.Attach(entity);
    dbContext.MyEntities.Remove(entity);
}
dbContext.SaveChanges();

しかし、どちらの場合も をすべて エンティティを読み込むか すべて のキー・プロパティを使って、セットからエンティティを一つずつ削除します。さらに SaveChanges EFはデータベースにn(=セット内のエンティティの数)個のDELETE文を送信し、それもDB内で1つずつ実行されます(1つのトランザクション内)。

したがって、単一の DELETE ステートメントを必要とするだけなので、この目的には直接 SQL が明らかに望ましいです。