如何避免EF 4中的无效并发修改

时间:2013-04-09 08:17:15

标签: entity-framework entity-framework-4.1

我有一个3层申请:

  1. 客户端申请
  2. 服务器应用程序
  3. 数据库服务器
  4. 服务器使用Entity Framework 4从数据库读取数据或从数据库写入数据。

    想象一下以下情况:

    1. 客户端应用程序创建具有RowVersion属性的实体的实例。此时,该属性等于null。
    2. 客户端应用程序向服务器发送请求“将此实例保存在数据库中”。
    3. 服务器将对象保存在数据库中,并自动设置RowVersion属性的值。但在客户端,该值仍然等于null。
    4. 客户端应用程序修改它在第一步中创建的对象,向服务器发送请求,服务器在尝试保存对象的新版本时获得并发异常。
    5. 是否有解决此类问题的标准机制?

1 个答案:

答案 0 :(得分:1)

我不知道系统内部如何工作(认为客户端和服务器之间的通信使用某些API)。正如我看到你试图处理2个客户修改同一个实体的情况,你需要通知客户端他是否正在尝试保存当前较旧的版本。

所以接下来我会做:

  • 在步骤3中,服务器必须返回版本ID(实体的第一次保存)
  • 客户端的下一次实体修改将具有版本ID,您需要检查当前版本ID是否等于或大于您 在服务器上(认为rowversion是时间戳)
  • 服务器逻辑将处理此状态并发送给客户端响应:保存新版本(如果当前版本相同并将发回 新版本ID)或虚假状态,如果版本较旧(其他客户端制作 已修改。)

这是简化的方式。

<强> [更新]

在本文中,您会发现非常接近您需求的实现: http://weblogs.asp.net/ricardoperes/archive/2012/05/28/yet-another-asp-net-mvc-crud-tutorial.aspx