Comment supprimer plusieurs lignes dans Entity Framework (sans foreach)

entity-framework

Question

Je supprime plusieurs éléments d'une table à l'aide d'Entity Framework. Il n'y a pas de clé étrangère / objet parent, je ne peux donc pas gérer cela avec OnDeleteCascade.

En ce moment je fais ça:

var widgets = context.Widgets
    .Where(w => w.WidgetId == widgetId);

foreach (Widget widget in widgets)
{
    context.Widgets.DeleteObject(widget);
}
context.SaveChanges();

Cela fonctionne mais le foreach me dérange. J'utilise EF4 mais je ne veux pas exécuter SQL. Je veux juste m'assurer que je ne manque de rien - c'est aussi bon que possible, non? Je peux le résumer avec une méthode d'extension ou une aide, mais quelque part, nous allons toujours faire un foreach, pas vrai?

Réponse acceptée

Si vous ne voulez pas exécuter SQL, appeler directement DeleteObject dans une boucle est ce que vous pouvez faire de mieux aujourd'hui.

Cependant, vous pouvez exécuter SQL et le rendre tout à fait général via une méthode d'extension, en utilisant l'approche que je décris ici .

Bien que cette réponse était pour 3.5. Pour la version 4.0, j'utiliserais probablement la nouvelle API ExecuteStoreCommand sous le capot, au lieu de descendre à StoreConnection.


Réponse populaire

EntityFramework 6 a un peu simplifié cela avec .RemoveRange() .

Exemple:

db.People.RemoveRange(db.People.Where(x => x.State == "CA"));
db.SaveChanges();


Related

Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow