2015-05-04 15 views
5

Po naciśnięciu przycisku jQuery używa ajax do usunięcia elementu, ale jest możliwe, żebym zrobił kolejną funkcję, która może "cofnąć" usunięcie, które właśnie miało miejsce?Cofanie zmian dokonanych przez zapisanie ostatniej bazy danych

Moja usunąć kontroler

[HttpPost] 
    public void DeleteProject(int Id) 
    { 
     var Item = from a in db.Project 
        where a.ProjectId.Equals(Id) 
        select a; 

     Project SelectedProject = Item.FirstOrDefault(); 
     ICollection<ProjectProfile> Profiles = SelectedProject.ProjectProfile; 
     ICollection<Member> Members = SelectedProject.Member; 

     db.Member.RemoveRange(Members); 
     db.ProjectProfile.RemoveRange(Profiles); 

     db.Project.Remove(SelectedProject); 
     db.SaveChanges(); 

     RedirectToAction("Index", "Projects"); 
    } 
+1

Nie, chyba że funkcja usuwania zapisuje element "usunięty" w innym miejscu po "usunięciu", tak jak może tymczasowo usuwa tabelę tymczasową. –

+0

Ktoś próbował rozwiązać ten problem: http://www.codeproject.com/Articles/474279/Implementing-Undo-Redo-feature-for-DbContext-of-En – romanoza

Odpowiedz

1

Istnieje kilka sposobów można to zrobić. Ogólnie rzecz biorąc, jest to trochę zbyt szerokie, aby zaoferować rozwiązanie jednoznaczne, ale oto kilka pomysłów:

  • Zamiast usuwać natychmiast, można utworzyć zadanie, które będzie działać w pewnym momencie, że zrobi to delete . Powiedz, 10 sekund. Przez 10 sekund wyświetlany jest przycisk "cofnij", który anuluje to zadanie przed uruchomieniem SaveChanges().
  • Można buforować element usuwasz w tabeli tymczasowej i przywrócić go
  • Można dodać IsDeleted trochę do stolika i używać, aby oznaczać, że rekord został usunięty, który może być przerzucona na woli " anuluj usuwanie ".
+1

używam 'IsDeleted' flagę w większości moich projektów i nigdy nie wpadł na lepszy pomysł, niestety. – romanoza

+0

to zdecydowanie najprostszy sposób, ale może doprowadzić do wzdęć. inne rozwiązania wymagałyby innych procesów uruchomionych lub tymczasowych, które są trudniejsze do utrzymania doskonale. – DLeh

+1

używam DeleteDate który jest DateTime? , Więc jeśli jest zerowa to nie jest usunięty, ale jeśli to ma wartość, a następnie jest ona usuwana + masz czasu usunięcia – Medo

Powiązane problemy