【发布时间】:2020-08-05 06:53:03
【问题描述】:
我正在开发一个投诉管理,我必须为每个投诉生成唯一的序列号,例如 00001/20 {序列号/年}。
我正在使用存储库模式,并且我正在使用以下代码 sn-p 生成此投诉编号,但问题是如果两个用户尝试同时提出投诉,它将生成相同的投诉编号并引发错误我将序列号保存在单独的表中,下面也提到了该表以供参考。让我知道实现这一目标的最佳方法
int serialNo = repository.serialNo.Find(c => c.Year == DateTime.Now.Year).FirstOrDefault().TicketCounter;
string complaintNo = string.Format("{0}", serialNo.ToString().PadLeft(5, '0'));
model.Id = repository.complaintRepo.GetMaxPK(c => c.Id);
我正在使用存储库模式。
【问题讨论】:
-
这会有帮助吗? *.com/questions/36868254/…
-
是的,但正如你所见,我有两列 ID 和投诉不,我想要唯一的,我可以使其自动生成,但投诉不是问题所在。这就是我手动获取最大值并递增的原因。
-
嗯,没错,但关键是模型 id 应该在数据库级别生成(或保留) - 然后它将保持唯一。我认为您在这里有几个解决方案,例如:默认情况下更改表以生成自定义ID,例如:dba.stackexchange.com/questions/222617/…(那么您根本不需要上面的代码,它将在创建新记录时由数据库完成)。或者,使用现有代码,但当您将其添加到数据库时出错时,再次分配下一个 # 并尝试再次保存。 SN 在所有年份中都是唯一的吗?
-
序列号将逐年变化,因此您建议如何生成投诉编号。我会在数据库级别生成,但是投诉没有呢??
-
如果您使用 sql server,您可以设置您的表,以便它生成一个序列,当您插入新的表中的行。
标签: asp.net entity-framework model-view-controller