Asp.Net Web API防止记录重复

时间:2015-03-23 02:43:49

标签: c# asp.net sql-server asp.net-web-api

我正在为我的iOS应用程序使用C#.NET Web API,但我担心多个请求会同时到达。

假设我尝试通过以下方式将新记录插入Users表时防止重复记录:

  1. 检查“用户”表中是否存在xxx@example.com
  2. 如果不存在则插入。
  3. 返回OK
  4. 实际上它很简单,除非web api运行异步。

    如果相关的web api方法同时获得两个请求(具有相同的电子邮件请求)以及第一个请求到达第2步(但尚未执行)并且第二个请求将获得"不存在&# 34;响应,因为第一个请求的第二步尚未执行。然后将保存两个电子邮件地址,我将有重复的记录。

    在静态对象上使用lock似乎可以解决问题,但会产生性能问题。

    如果我不希望数据库重复行,我该如何克服这个问题呢?

    UPDATE:
    

    我不能在电子邮件列上使用唯一约束,因为我已在Id列上使用它。

1 个答案:

答案 0 :(得分:1)

如果您使表中的电子邮件地址具有唯一约束,那么您只需要插入电子邮件地址,如果它已经存在则会失败,否则您将插入新记录。

您需要处理失败,可能会使用一些适当的代码回复客户端,因此它知道电子邮件已经存在。