c# - 不在多线程环境中为具有 Bigint 作为数据类型的 SQL 列生成随机唯一 ID
问题描述
我有一个数据类型为 as 的 SQL 列Bigint
,因此当我在多线程环境中使用 C# Random 类生成唯一编号时,我看到有重复值而不是唯一值,我只能看到系统 GUID 是生成的唯一选项唯一的ID,你能帮我解决这个问题吗?
private Object thisLock = new Object();
public Random a = new Random(DateTime.Now.Ticks.GetHashCode());
private void NewNumber()
{
lock (thisLock)
{
MyNumber = a.Next(0, 10);
}
}
解决方案
该类Random
生成随机值,而不是唯一值。在您的示例代码中,唯一整数的最大数量为 10(从 0 到 9)。因此,如果您至少调用此方法 11 次,则可以保证有一个或多个重复项。
对于数据库,您应该使用标识列。
推荐阅读
- python - Mapnik + TileStache + uWSGI / IOError:无法识别图像文件
- php - 使用正确的 ColSpan 从星期一开始 PHP 日历
- ruby - 502 糟糕,Bad Gateway GitLab 响应时间过长
- c# - Asp .Net Core 如何处理区域内的错误页面
- system-verilog - 我是否需要避免在 UVM 中使用 OOMR(模块外引用)代码?
- c# - 使用 Ajax Jquery 将 Json 结果返回的数据数组放入 DataTable 中
- java - Spring Security:允许公共端点,不允许其他端点
- ruby-on-rails - 有没有办法将所有控制器方法的响应包装在 application_controller.rb 中的 json 对象中?
- python - 将字符串数组转换为整数python
- php - EXCEL:如何在excel中添加背景标题颜色;使用 PHP 导出?