首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >我应该如何处理实体框架中可能出现的大量编辑?

我应该如何处理实体框架中可能出现的大量编辑?
EN

Stack Overflow用户
提问于 2014-03-10 07:58:21
回答 2查看 40关注 0票数 2

我使用的是.NET 4.5.1和EF6.0.2和db-first。

用例如下所示:

  1. 大约有50k个实体被加载
  2. 这些实体中的一组是为用户显示的,而其他实体则是正确显示项目所必需的。
  3. 用户可以对实体执行重操作,这意味着用户选择执行一个级联操作,从而实际影响到潜在的数百个实体。
  4. 这些更改被保存回数据库。

那么,问题是什么是处理这一问题的最佳方法?到目前为止,我已经想出了两种不同的解决方案,但也不太喜欢:

  1. 在步骤1中创建一个DbContext,在整个过程中保持它,然后最后保存更改。我不一定喜欢这样的原因,因为这个过程可能需要几个小时,据我所知,DbContexts不应该保存这么长时间。
  2. 在步骤1中创建一个DbContext,然后立即丢弃它。在步骤4中,创建一个新的DbContext,将修改的实体附加到它并保存更改。使用这种方法我看到的最大问题是,如何确定哪些实体实际上已被更改?我需要自己构建一个ChangeTracker才能做到这一点吗?

那么,是否有更好的方法来处理这个问题,或者我是否应该使用上面的解决方案之一(可能有一些更改)?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-03-10 08:03:40

我将使用选项1-在整个过程中使用DbContext。

我遇到的问题是断言the process might take hours。我不认为这是你想做的事。想象一下,当用户编辑数据3个小时之后,在单击最终保存之前,会发生什么情况?你会让用户用干草叉追着你。

您还面临许多并发问题--如果两个用户同时执行相同的冗长过程,怎么办?经过几个小时的工作后处理冲突将是一个问题,特别是如果您告诉用户他们几小时前所做的更改无法保存。又是干草叉。

所以,我认为你应该使用数字3-保存编辑过程的增量更改,这样用户的工作就不会丢失,如果发生了一些不好的事情,那么如果两个用户同时更新数据,那么您就可以处理冲突了。

您可能希望将增量更改放在单独的位置,而不是您的主表中,因为业务更改尚未完成。

票数 1
EN

Stack Overflow用户

发布于 2014-03-10 08:00:54

据我所知,DbContexts不应该保存这么久。

哈哈?

数据库上下文中没有关于不保存它的任何内容。您可能会遇到与其他已经编辑过该项的人之间的问题,但是这是一个固有的架构问题--通常在“多小时编辑马拉松”中使用乐观和悲观的锁定是不建议的。

如果您有超过几个小时的编辑,唯一明智的方法是使用您自己的更改跟踪器,并在更改时使用适当的逻辑-和/或使用逻辑锁定机制(数据库中的标志)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22294813

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档