87 votes

Comment dois-je supprimer tous les éléments d'un DbSet?

Quelle est la meilleure façon de supprimer tous les éléments d'un System.Data.Entity.DbSet, avec Entity Framework 4.3?

111voto

Slauma Points 76561
dbContext.Database.ExecuteSqlCommand("delete from MyTable");

(Sans blague.)

Le problème est que les EF ne prend pas en charge toutes les commandes de traitement par lots et la seule façon de supprimer toutes les entités dans un jeu utilisant pas directement DML serait:

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

Ou peut-être un petit peu moins cher pour éviter de charger plein d'entités:

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();

Mais dans les deux cas, vous devez charger toutes les entités ou toutes les propriétés de clé et supprimer les entités, un par un à partir de l'ensemble. En outre, lorsque vous appelez SaveChanges EF enverra n (=nombre d'entités dans le jeu) DELETE à la base de données qui par ailleurs sont exécutées une par une dans la DB (en une seule opération).

Donc, SQL directe est nettement préférable pour cela que vous avez seulement besoin d'une seule instruction DELETE.

18voto

Tim Cooke Points 43

Voici une autre façon de le faire dans le code.

 public static class Extensions
{
    public static void DeleteAll<T>(this DbContext context)
        where T : class
    {
        foreach (var p in context.Set<T>())
        {
            context.Entry(p).State = EntityState.Deleted;
        }
    }
}
 

Pour appeler réellement la méthode et effacer le jeu:

 myDbContext.DeleteAll<MyPocoClassName>();
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X