【问题标题】:How to revert save changes of an entity dbcontext如何恢复实体 dbcontext 的保存更改
【发布时间】:2023-03-23 09:40:02
【问题描述】:

我需要在不同时间在我的实体上下文中保存多个表。如果其中一种保存更改方法运行但另一个表的另一种保存更改方法失败,我正在尝试将数据库恢复到其原始状态。

为了实现这一点,我尝试创建两个实体上下文,如下所示。我将更改的第一个实体,并在需要时在不同的表上调用 SaveChanges 方法。但是,如果发生错误,我会尝试使用第二个实体上下文来覆盖到目前为止对数据库所做的任何更改。

有没有办法用我在程序开始时创建的“originlEntityValues”上下文覆盖数据库值?

下面的代码示例希望能更清楚地解释它

我在程序开始时实例化了两个实体上下文(它们继承自 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?
}

任何帮助都非常感谢提前感谢。

【问题讨论】:

    标签: entity-framework dbcontext


    【解决方案1】:

    您是否尝试过使用TransactionScope 类将其包装成1 个大transaction?当出现问题时,直到调用 TransactionScope.Complete 才会写入数据。

    【讨论】:

    • 我想我在使用它时仍然会遇到问题,因为我需要将联系人表保存到数据库中,以便它可以为其生成一个 Id(主键),然后我在事务中使用它记录。
    • 没关系,只要做了一些测试,transactionscope 就可以完美运行。非常感谢!会支持你,但没有足够的代表
    猜你喜欢
    • 1970-01-01
    • 2012-03-18
    • 1970-01-01
    • 2013-01-27
    • 2012-08-31
    • 1970-01-01
    • 1970-01-01
    • 2012-12-31
    • 1970-01-01
    相关资源
    最近更新 更多