我需要在不同的时间在我的实体上下文中保存多个表。如果其中一个保存更改方法运行但另一个表的另一个保存更改方法失败,我试图将数据库恢复到其原始状态。
为了达到这个目的,我试图创建两个实体上下文,如下所示。我将更改第一个实体,并在需要时在不同的表上调用SaveChanges方法。但是,如果发生错误,我会尝试使用第二个实体上下文来覆盖到目前为止发生的对数据库的任何更改。
有没有办法用我在程序开头创建的“origianlEntityValues”上下文覆盖数据库值?
下面的代码示例希望能更清楚地解释
我在程序开始时实例化两个实体上下文(它们继承自DbContext)。一个我会改变。另一个我试图使用以防错误发生以恢复更改
SystemEntities entity = new SystemEntities();
SystemEntities originalEntityValues = new SystemEntities();
在整个程序中我需要单独保存表,因为我需要获取它们生成的Id值并在其他实体类中使用它们然后我继续调用保存更改,所以我调用这样的代码
entity.Contact.SaveChanges();
....
entity.Transact.SaveChanges();
如果第一次保存更改运行正常,但第二次导致错误,我试图使用 “originalEntityValues”覆盖以前的保存更改调用,因此当程序在发生意外错误时启动时,我的数据库具有相同的值。
catch{
// refresh the database with the originalEntityValues context?
}
提前感谢任何帮助。
答案 0 :(得分:2)
您是否尝试使用TransactionScope类将其包装为1个大transaction?出现问题时,在调用TransactionScope.Complete之前不会写入数据。