我使用.NET 4.5.1与EF 6.0.2和db-first。
用例是这样的:
那么,问题是处理这个问题的最佳方法是什么?到目前为止,我已经提出了两种不同的解决方案,但并非如此:
那么有更好的替代方法来处理这个,或者我应该使用上述解决方案之一(可能有一些更改)?
答案 0 :(得分:1)
据我所知,DbContexts不应该保留很长时间。
HAH?
db上下文中没有任何内容关于不保留它。您可能会遇到已编辑该项目的其他人的问题,但这是一个固有的架构问题 - 通常不建议在“多小时编辑马拉松”中使用乐观和悲观锁定。
如果您在几小时内进行编辑,唯一合理的方法是使用您自己的更改跟踪器并在更改时使用正确的逻辑 - 和/或使用逻辑锁定机制(数据库中的标志)。
答案 1 :(得分:1)
我会选择1号选项 - 在整个过程中使用DbContext。
我遇到的问题是断言the process might take hours
。我不认为这是你想做的事情。想象一下,当您的用户编辑数据3小时后会发生什么,然后在点击最终保存之前面临停电。您将有用户使用干草叉后运行。
您还面临很多并发问题 - 如果两个用户同时执行相同的漫长过程会怎么样?在几个小时的工作之后处理碰撞将是一个问题,特别是如果你告诉用户他们几小时前做出的改变无法保存。干草叉再次。
所以,我认为你应该使用数字3 - 保存编辑过程的增量更改,因此如果发生不好的事情,用户的工作不会丢失,并且如果两个用户正在更新数据,则可以处理冲突同时。
您可能希望将增量更改保留在单独的位置,而不是主表,因为业务更改尚未最终确定。