撤消/重做的多个上下文

时间:2012-09-24 10:00:05

标签: c# entity-framework

我正在尝试使用实体框架创建撤消/重做的过程。

我想创建一个这样的类:

public class multiContext
{
    public int _id { get; set; }
    public undoEntities _context { get; set; }
}

并为每个修改创建一个新的multiContext

private void btnSendB_Click(object sender, RoutedEventArgs e)
{
     multiContext nContext = new multiContext { _id = multiContextManager.getEntityID(listEntities), _context = new undoEntities};
     listEntities.Add(nContext);
     foreach (TB1 item in gridA.SelectedItems)
     {
         item.Status = "B";

         nContext._context.Entry(item).State = System.Data.EntityState.Modified;
         nContext._context.SaveChanges();
     }

     refreshGrids();
 }

但问题是当我在SaveChanges()时,它会改变列表中的所有上下文。

如何只保存实际内容。

提前致谢

1 个答案:

答案 0 :(得分:0)

我想到了同样的想法。您必须将每个修改存储在堆栈中的单独上下文中,以便撤消,然后重做。在添加之前,请致电

this.DBContext.Entry(item).State = System.Data.EntityState.Modified;

然后当你从撤销或重做堆栈中取出它时,你只需要调用this.DBContext.SaveChanges()然后用新的上下文重新加载文本框。