我正在为我的iOS应用程序使用C#.NET Web API,但我担心多个请求会同时到达。
假设我尝试通过以下方式将新记录插入Users表时防止重复记录:
xxx@example.com
。OK
。实际上它很简单,除非web api运行异步。
如果相关的web api方法同时获得两个请求(具有相同的电子邮件请求)以及第一个请求到达第2步(但尚未执行)并且第二个请求将获得"不存在&# 34;响应,因为第一个请求的第二步尚未执行。然后将保存两个电子邮件地址,我将有重复的记录。
在静态对象上使用lock
似乎可以解决问题,但会产生性能问题。
如果我不希望数据库重复行,我该如何克服这个问题呢?
UPDATE:
我不能在电子邮件列上使用唯一约束,因为我已在Id列上使用它。
答案 0 :(得分:1)
如果您使表中的电子邮件地址具有唯一约束,那么您只需要插入电子邮件地址,如果它已经存在则会失败,否则您将插入新记录。
您需要处理失败,可能会使用一些适当的代码回复客户端,因此它知道电子邮件已经存在。