0

我知道我们可以通过以下命令访问 OpenAccessContext 中的新/修改/删除实体。

dbContext.GetChanges().GetInserts<object>() dbContext.GetChanges().GetUpdates<object>() dbContext.GetChanges().GetDeletes<object>()

如果在执行 SaveChanges() 时由于任何原因发生异常,我需要记录这些实体,但在出现异常时它们会被清除。

无论如何,如果出现异常,是否可以将实体从 OpenAccessContext 中取出?

4

1 回答 1

1

您可以像这样覆盖 SaveChanges 方法:

  public override void SaveChanges()
  {
    ContextChanges cruds = this.GetChanges;
    IList<object> inserts = cruds.GetInserts<object>();
    IList<object> updates = cruds.GetUpdates<object>();
    IList<object> deletes = cruds.GetDeletes<object>();

    try {
        base.SaveChanges(ConcurrencyConflictsProcessingMode.AggregateAll);
    } catch (Exception ex) {
        // Retry or in your case log...
        this.Refresh(RefreshMode.PreserveChanges, updates); 
        this.Delete(deletes);
        this.Add(inserts);

        Thread.Sleep(1000);
        base.SaveChanges();
    } finally {
        this.FlushChanges(true);
    }
  }

当 savechanges 失败时,仍然可以访问更改。您还可以在处理异常时记录异常。

于 2017-10-26T17:34:30.773 回答