2009-11-23 10 views
11

Ho letto che il nuovo Entity Framework includerà un metodo per eliminare più elementi (da Linq a SQL è DeleteAllOnSubmit()) ma non riesco a trovare la funzione/metodo per farlo.Entity Framework 4 Multiple Object Delete (RemoveAll)

È questo in Beta 2 o devo fare il mio?

UPDATE:

Questo è quello che sto usando ora:

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

possibile duplicato di [Eliminazione collettiva in LINQ alle entità] (http://stackoverflow.com/questions/869209/bulk-deleting-in-linq-to-entities) –

risposta

8

EF 4 consente di eseguire istruzioni TSQL contro un contesto oggetto:

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

vedere il seguente blog per dettagli.

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

+0

C'è un inconveniente alla mia funzione? – Omar

+2

Lo svantaggio sarebbe che tutti gli oggetti sono tenuti in memoria durante la rimozione. Se si desidera eliminare un grande gruppo di oggetti che non sono stati ancora caricati dal database, tutti verranno caricati nell'applicazione prima che vengano eliminati. –

+1

Ick. Per citare l'articolo a cui si fa riferimento, "Questa capacità deve essere utilizzata solo nei casi in cui Entity Framework non supporta qualcosa che è necessario." EF supporta l'eliminazione di più oggetti, chiama DeleteObject() e quindi SaveChanges() (o fai questo http://stackoverflow.com/a/870081/24267). – mhenry1384

0

So che questo è in ritardo, ma ho trovato questo post ed ho trovato una soluzione più semplice, che non è stato pubblicato. È possibile impostare OnDelete su Cascade nelle proprietà dell'associazione. In VS2012 apri il file edmx. Fai clic sull'associazione e troverai OnDelete nella scheda Proprietà. Quindi è possibile utilizzare il metodo Remove() senza trigger o qualsiasi altra gestione speciale.

Problemi correlati