2016-06-06 8 views
5

Ho questo metodo:Come posso cancellare righe da tabelle usando EF quando ci si trova all'interno di un metodo Asp.Net?

[Route("Delete")] 
public IHttpActionResult Delete() 
{ 

} 

Quello che vorrei fare è quello di eliminare da tre tabelle che sono qui:

public System.Data.Entity.DbSet<SampleSentence> SampleSentences { get; set; } 
public System.Data.Entity.DbSet<Synonym> Synonyms { get; set; } 
public System.Data.Entity.DbSet<WordForm> WordForms { get; set; } 

C'è una funzione di eliminazione in EF6 che posso usare per eliminare tutte le righe o dovrei in qualche modo fare una chiamata SQL?

+0

proiettare le DbSets in una lista e poi enumerare ciascuna a 'DbSet.Remove'. È quindi possibile chiamare "SaveChanges" in "DbContext". Altrimenti puoi sempre usare 'DbContext.Database.ExecuteSqlCommand' – Nkosi

+0

@Nkosi - Non farebbe molte chiamate al database? Posso farlo con in qualche modo l'invio diretto di SQL al database? – Alan2

+0

Sì, la seconda parte del mio commento consente di SQL diretto sul database – Nkosi

risposta

2

Supponendo di avere una classe derivata DbContext ...

using (var transactionScope = new TransactionScope()) { 
    try { 
     string sql = @" 
DELETE SampleSentence 
DELETE Synonym 
DELETE WordForm 
"; 

     int count = myDbContext.Database.ExecuteSqlCommand(sql); 
     if(count > 0) 
      transactionScope.Complete(); 
    } catch(Exception ex) { 
     //Logging 
    } 
} 
+0

@Nikosi - Questa chiamata al database restituisce un codice per indicare se ha funzionato o non? Mi chiedo solo se dovrei mettere tutto questo in un tentativo di cattura per verificare eventuali eccezioni. Grazie. – Alan2

+0

normalmente è il conteggio del numero di righe interessate dal comando. Puoi eseguire il wrapping in una transazione e provare a rilevare in caso di errore, in modo da poter eseguire il rollback se necessario. – Nkosi

2

È possibile utilizzare questo EntityFramework.Extended library, con esso aiutare si può scrivere:

context.SampleSentences.Delete(); 
context.Synonyms.Delete(); 
context.WordForms.Delete(); 
1

ho appena trovato su StackOverflow

db.ProRel.RemoveRange(db.ProRel.Where(c => c.ProjectId == Project_id)); 

How to delete multiple records with Entity Framework ASP.Net MVC 5?

ma io uso questo metodo per eliminare una riga

var Cert = (from cert in db.TblCompCertUploads where cert.CertID == ID select cert).FirstOrDefault(); 
if (Cert != null) 
{ 
    db.TblCompCertUploads.DeleteObject(Cert); 
    db.SaveChanges(); 
    ViewBag.Msg = "Deleted Successfully"; 
} 

per le righe Mulitple

List<tbl_CompCertificate> tbp = db.tbl_CompCertificate.Where(t => t.CompCer_CompId == CompId).ToList(); 
foreach (tbl_CompCertificate t in tbp) 
{ 
    db.tbl_CompCertificate.DeleteObject(t); 
    db.SaveChanges(); 
} 
Problemi correlati