2016-06-06 8 views
5

mam tej metody:Jak mogę usunąć wiersze z tabel przy użyciu EF, gdy wewnątrz metody Asp.Net?

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

} 

Co chciałbym zrobić, to usunąć z trzech tabel, które są tutaj:

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; } 

Czy istnieje kasowania funkcji w EF6 że mogę używać, aby usunąć wszystkie wiersze lub powinienem jakoś wywołać SQL?

+0

projektu DbSets do listy, a następnie Wyliczanie każdy do 'DbSet.Remove'. Następnie możesz wywołać 'SaveChanges' w' DbContext'. Jeśli nie, zawsze możesz użyć 'DbContext.Database.ExecuteSqlCommand' – Nkosi

+0

@Nkosi - Czy to nie spowoduje wielu połączeń z bazą danych? Czy mogę to zrobić, przesyłając SQL bezpośrednio do bazy danych? – Alan2

+0

Tak, druga część mojego komentarza pozwala na SQL bezpośrednio w bazie danych – Nkosi

Odpowiedz

2

Zakładając, że masz klasę DbContext pochodzący ...

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 - Czy to wywołanie do bazy danych zwróci kod, aby wskazać, czy zadziałało lub nie? Zastanawiam się, czy powinienem to wszystko przetestować, żeby sprawdzić ewentualne wyjątki. Dzięki. – Alan2

+0

to zwykle liczba wierszy, które zostały dotknięte przez polecenie. Możesz zawinąć ją w transakcji i spróbować złapać w przypadku błędu, aby można było wycofać w razie potrzeby. – Nkosi

2

Można użyć tej EntityFramework.Extended library, z jego pomocy można napisać:

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

Właśnie znalazłem na stackoverflow

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

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

Ale mogę użyć tej metody, aby usunąć wiersz

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"; 
} 

Dla mulitple Wiersze

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