0

我有一个 3 层应用程序:

  1. 客户端应用
  2. 服务器应用
  3. 数据库服务器

服务器使用 Entity Framework 4 向/从数据库读取数据。

想象以下情况:

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

有没有解决这类问题的标准机制?

4

1 回答 1

1

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

所以我接下来会做:

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

这就是简化的方式。

[更新]

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

于 2013-04-09T08:38:08.747 回答