2010-08-05 119 views
2

我想在实体框架和存储库模式中使用MVC应用程序 在此应用程序中,最终用户可能会在会话期间通过多个http请求修改不同的实体数据。 (类型的向导页面) 然而,他们确实提交这些修改,直到最终提交按钮被点击 这些也可以选择离开,这种情况下,他们的工作应该被回滚。实体框架ObjectContext:并发

我想知道会发生什么,如果两个用户都在做同样的事情,其中​​一个点击提交按钮 我猜这两个用户所做的更改是承诺!

我想我只需要一次开始,一次获取数据的持久化通过创建用户连接或会话 一个对象上下文您的意见是非常欢迎

回答

1

的情况下应该使用。
(没有长期的'多http请求'上下文)。

所以你做的是这样的:

  1. 创建上下文,获取数据,情境的处理。
  2. 以任何喜欢的方式(不使用上下文)管理跨多个请求的数据的用户更改。会话,隐藏字段等。
  3. 创建上下文,保留修改后的实体,处理上下文。

关于步骤2 - I建议使用特定对象(ViewModels),而不是EntityObjectsViews用于用户交互。

+0

Yakimych,非常感谢你的意见。但是,您是否建议我不应该利用EF ObjectContext提供的更改跟踪? 如果是这样,为什么不呢? – user385411 2010-08-05 10:30:44

+2

不是你的情况。 ObjectContext是一个UnitOfWork。它不是线程安全的,意味着尽可能短暂。如果跨Web请求使用相同的ObjectContext,或者每个用户使用相同的ObjectContext,则可能会遇到一系列问题(您在问题中提到的其中一个问题)。如果您确实想使用某些EF状态跟踪功能,请查看自我跟踪实体。 – Yakimych 2010-08-05 10:47:07