我需要在不同的时间在实体上下文中保存多个表。如果其中一个保存更改方法运行,但另一个表的保存更改方法失败,我将尝试将数据库恢复到原始状态。
为了实现这一点,我试图创建两个实体上下文,如下所示。我将更改的第一个实体,并在需要时对不同的表调用SaveChanges方法。但是,如果发生错误,我将尝试使用第二个实体上下文来覆盖迄今为止对数据库所做的任何更改。
有没有一种方法可以用我在程序开始时创建的"originalEntityValues"上下文覆盖数据库值?
下面的代码示例希望能更清楚地解释
我在程序开始时实例化了两个实体上下文(它们继承自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?
}
如有任何帮助,我们将不胜感激。
您是否尝试过使用TransactionScope类将其封装为一个大型事务?当出现错误时,直到调用TransactionScope.Complete之后才写入数据。