【问题标题】:Undo changes done by last database save撤消上次数据库保存所做的更改
【发布时间】:2015-05-04 19:57:39
【问题描述】:

当我按下一个按钮时,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");
    }

【问题讨论】:

  • 除非您的删除功能在“删除”之后将“已删除”项目存储在其他位置,例如可能会定期清除的临时表。
  • 有人试图解决这个问题:codeproject.com/Articles/474279/…

标签: c# asp.net-mvc entity-framework asp.net-mvc-4


【解决方案1】:

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

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

【讨论】:

  • 我在大多数项目中都使用IsDeleted 标志,但遗憾的是,我从来没有想出更好的主意。
  • 这绝对是最简单的方法,但可能会导致臃肿。其他解决方案将需要其他正在运行的进程或难以完美维护的临时进程。
  • 我使用的是 DateTime 的 DeleteDate? , 所以如果它是 null 那么它不会被删除,但如果它有值那么它就会被删除 + 你得到删除时间
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多