Entity framework 4 实体框架-如何在保存数据时出现故障

Entity framework 4 实体框架-如何在保存数据时出现故障,entity-framework-4,Entity Framework 4,假设情况是这样的:我的应用程序中有一个对象上下文,我从数据库下载了15k条记录(比如15k张发票)。用户选择一个并对其进行一些更改。我调用SaveChanges(),但由于某种原因它失败了(不管是什么原因) 现在使用的上下文无法执行任何保存操作,因为它无法保存这些更改。我该怎么做才能让它工作 另一种情况是,我使用单独的上下文进行更改。如果保存失败,那么什么也不会发生-我放弃上下文,就这样。出现的问题是:如何将更改合并回主上下文?(没有再次下载15k记录)下载15k记录的想法听起来很糟糕,但我们假

假设情况是这样的:我的应用程序中有一个对象上下文,我从数据库下载了15k条记录(比如15k张发票)。用户选择一个并对其进行一些更改。我调用SaveChanges(),但由于某种原因它失败了(不管是什么原因)

现在使用的上下文无法执行任何保存操作,因为它无法保存这些更改。我该怎么做才能让它工作


另一种情况是,我使用单独的上下文进行更改。如果保存失败,那么什么也不会发生-我放弃上下文,就这样。出现的问题是:如何将更改合并回主上下文?(没有再次下载15k记录)

下载15k记录的想法听起来很糟糕,但我们假设你必须这么做。要使此工作正常进行,您必须遵循的场景如下所示:

  • 为数据检索创建第一个上下文
  • 执行查询以获取15k记录。执行查询作为
    NoTracking
    ObjectQuery
    MergeOption
    )!它将提高性能,因为这些记录将不再在上下文中使用
  • 关闭第一个上下文
  • 用户选择和发票=创建发票的深度克隆并将其附加到新上下文(在WPF或WinForm应用程序的情况下)
  • 用户保存更改并触发异常。若你们想以某种方式处理异常,你们仍然只有一张发票的上下文。您可以处理上下文并返回到未受影响的原始记录集
  • 如果实体已保存,则应将更改合并回列表,因为15k记录中的实体不会自动更新