2009-11-23 8 views
11

J'ai lu que le nouvel Entity Framework inclura une méthode pour supprimer plusieurs éléments (Linq to SQL a DeleteAllOnSubmit()) mais je ne trouve pas la fonction/méthode pour le faire.Entity Framework 4 Supprimer plusieurs objets (RemoveAll)

Est-ce que c'est dans la version bêta 2 ou dois-je faire moi-même?

MISE À JOUR:

C'est ce que j'utilise maintenant:

public void DeleteObjects(IEnumerable<object> objects) 
    { 
     foreach (object o in objects) 
     { 
      DeleteObject(o); 
     } 
     SaveChanges(); 
    } 
+1

duplication possible de [Bulk-delete dans LINQ to Entities] (http://stackoverflow.com/questions/869209/bulk-deleting-in-linq-to-entities) –

Répondre

8

EF 4 vous permet d'exécuter des instructions TSQL contre un contexte d'objet:

using (var context = new EntityFrameworkExampleEntities()) 
    {  
    var count = 
     context.ExecuteStoreCommand(@"DELETE FROM Companies WHERE [CompanyID]=4");    
    } 

Voir le blog suivant pour plus de détails.

http://blogs.microsoft.co.il/blogs/gilf/archive/2009/11/25/execute-t-sql-statements-in-entity-framework-4.aspx

+0

Y at-il un inconvénient à ma fonction? – Omar

+2

L'inconvénient serait que tous vos objets sont conservés en mémoire lors de la suppression. Si vous vouliez supprimer un grand nombre d'objets que vous n'aviez pas encore chargés depuis la base de données, ils seraient tous chargés dans l'application avant d'être supprimés. –

+1

Ick. Pour citer l'article que vous liez, "Cette capacité ne doit être utilisée que dans les cas où Entity Framework ne prend pas en charge quelque chose dont vous avez besoin." EF prend en charge la suppression de plusieurs objets, appelez DeleteObject(), puis SaveChanges() (ou faites ceci http://stackoverflow.com/a/870081/24267). – mhenry1384

0

Je sais que c'est en retard, mais j'ai trouvé ce post et trouvé une solution plus simple, qui n'a pas été posté. Vous pouvez définir OnDelete to Cascade dans les propriétés de l'association. Dans VS2012, ouvrez le fichier edmx. Cliquez sur l'association et vous trouverez le OnDelete dans l'onglet Propriétés. Ensuite, vous pouvez utiliser la méthode Remove() sans déclencheurs ou toute autre manipulation spéciale.