序列生成器

时间:2013-12-09 13:26:59

标签: c# database sequence

我有一个存储客户详细信息的数据库(我有一个表格可以输入详细信息,客户编号会自动生成)。如果我有1,2,3,4,5作为客户ID,那么下次创建客户时表格应将客户ID默认为6。

我达到了上述目标。但是,如果我同时创建两个客户,它们都会显示为6.但是我想要每次打开一个表格,客户ID的值应该是唯一的。(即)如果我点击创建客户现在它应该显示6,然后我同时打开另一个表单我应该得到客户ID为7 ...

如何实现这一目标?

2 个答案:

答案 0 :(得分:2)

我建议将客户ID 作为自动增量的主键。

因此,无论何时将值添加到customer表中,Id都将是Unique,它将自动递增。

原因背后是:在您的代码中,如果两个用户一次使用相同的表单,则两者都会收到相同的 maxPartyId ,当两个用户都提交表单时,相同的Id 将存储maxPartyId + 1 。这意味着客户ID将在您的数据库中重复

答案 1 :(得分:1)

两种可能性:

  • 数据库:让您的DBMS为您执行主键生成;在完成记录生成之前,不要假设您拥有有效的ID。实施将在很大程度上取决于您选择的数据库。
  • 单例/互斥锁:让单个类生成并分发ID。使用lock statement来阻止并行生成。

我个人会推荐第一种方法;实现通常更简洁,您不必担心线程锁定。