C# 撤消上次数据库保存所做的更改

C# 撤消上次数据库保存所做的更改,c#,asp.net-mvc,entity-framework,asp.net-mvc-4,C#,Asp.net Mvc,Entity Framework,Asp.net Mvc 4,当我按下一个按钮时,jQuery使用ajax来删除一个项目,但是我可以使用另一个函数来“撤销”刚刚发生的删除吗 我的删除控制器 [HttpPost] public void DeleteProject(int Id) { var Item = from a in db.Project where a.ProjectId.Equals(Id) select a; P

当我按下一个按钮时,jQuery使用ajax来删除一个项目,但是我可以使用另一个函数来“撤销”刚刚发生的删除吗

我的删除控制器

    [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");
    }
[HttpPost]
公共项目(内部Id)
{
var Item=来自数据库中的项目
其中a.ProjectId等于(Id)
选择一个;
Project SelectedProject=Item.FirstOrDefault();
ICollection Profiles=SelectedProject.ProjectProfile;
ICollection Members=SelectedProject.Member;
db.成员(成员);
db.ProjectProfile.Removate(配置文件);
db.Project.Remove(SelectedProject);
db.SaveChanges();
重定向至行动(“索引”、“项目”);
}

有几种方法可以做到这一点。总的来说,它有点过于宽泛,无法提供明确的解决方案,但这里有一些想法:

  • 您可以创建一个在一定时间内运行的任务来执行删除操作,而不是立即删除。比如说,10秒。在10秒钟内,您将显示一个“撤消”按钮,该按钮将从运行
    SaveChanges()
    中取消该任务
  • 您可以将要删除的项缓存在临时表中并还原它
  • 您可以向表中添加一个
    IsDeleted
    位,并使用该位表示记录已被删除,可以随意将其翻转为“取消删除”

除非您的删除功能在“删除”后将“已删除”项存储在其他位置,例如定期清除的临时表。有人试图解决这个问题:我在大多数项目中使用了
IsDeleted
标志,但遗憾的是,从来没有想出更好的主意。这绝对是最简单的方法,但可能会导致肿胀。其他解决方案需要其他正在运行的进程或临时进程,很难完美地维护。我使用DeleteDate,它是DateTime,所以如果它为空,则不会被删除,但如果它有值,则会被删除+您将获得删除时间