C# 撤消上次数据库保存所做的更改
当我按下一个按钮时,jQuery使用ajax来删除一个项目,但是我可以使用另一个函数来“撤销”刚刚发生的删除吗 我的删除控制器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
[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,所以如果它为空,则不会被删除,但如果它有值,则会被删除+您将获得删除时间