Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在实体框架中处理促销代码分配而不发生冲突?_C#_Database_Entity Framework_Database Design_Locking - Fatal编程技术网

C# 如何在实体框架中处理促销代码分配而不发生冲突?

C# 如何在实体框架中处理促销代码分配而不发生冲突?,c#,database,entity-framework,database-design,locking,C#,Database,Entity Framework,Database Design,Locking,假设我有一个促销代码表和一个联系人表。每个联系人可以有一个促销代码,每个促销代码只能分配给一个联系人。我如何使用一个分配程序,从表中选择促销代码,并将其分配给联系人,而不会出现并发问题/冲突 最坏情况: 联系一个请求代码。 找到第一个可用的促销代码,并从数据库中选择促销代码A。 联系B请求代码。找到并从数据库中选择第一个可用的促销代码,促销代码A。 将保存对联系人A的更改。 将保存对联系人B的更改。 现在,根据促销代码分配的存储方式,将发生以下两种情况之一: 2个联系人将分配相同的促销代码。 如

假设我有一个促销代码表和一个联系人表。每个联系人可以有一个促销代码,每个促销代码只能分配给一个联系人。我如何使用一个分配程序,从表中选择促销代码,并将其分配给联系人,而不会出现并发问题/冲突

最坏情况:

联系一个请求代码。 找到第一个可用的促销代码,并从数据库中选择促销代码A。 联系B请求代码。找到并从数据库中选择第一个可用的促销代码,促销代码A。 将保存对联系人A的更改。 将保存对联系人B的更改。 现在,根据促销代码分配的存储方式,将发生以下两种情况之一:

2个联系人将分配相同的促销代码。 如果引发重复密钥异常,联系人B将收到错误。 仅供参考,我正在使用保存在HTTPContext中的DataContext,以便每个HTTP请求都可以使用它。不知道这是否重要


那么,使用C和实体框架,我如何在不遇到这些类型冲突的情况下完成这个促销代码分配呢?提前谢谢

我会在promo code表中添加一列,以便能够将代码标记为已被使用

读取促销代码将在可重复读取事务中完成,该事务还将促销代码标记为已被使用


这保证促销代码只提供一次。

我不能这样做吗:

UPDATE PromoCodes
SET Assigned = 1
ContactID = x
LIMIT 1
这样,我就不需要事先阅读代码,只需将代码重新分配,然后在获得代码后:

SELECT * FROM PromoCodes
Where ContactID = x
对这种方法有何评论