我从控制器
以这种方式生成用户IDlong lastUserId = 0;
var userProfile = from m in db.UserProfiles select m;
userProfile = userProfile.Where(s => s.DbType == "OFFLINE");
foreach (var c in userProfile)
{
lastUserId = c.UserId;
}
if (lastUserId != 0)
{
lastUserId = lastUserId + 1;
}
else
{
lastUserId = 1000001;
}
当任何两个人同时注册并点击控制器时,我现在得到了密钥违规错误该怎么办?
答案 0 :(得分:1)
对ID使用 GUID ,或者在数据库中使用BigInt并让数据库处理此问题,以使 ID字段自动增加。
Guid lastUserId;
var userProfile = from m in db.UserProfiles select m;
userProfile = userProfile.Where(s => s.DbType == "OFFLINE");
foreach (var c in userProfile)
{
lastUserId = c.UserId;
}
if (your condition)
{
lastUserId = new Guid();
}
答案 1 :(得分:1)
我建议在该列上使用IDENTITY
的主键,因此您无需检查。
if (lastUserId != 0)
{
lastUserId = lastUserId + 1;
}
else
{
lastUserId = 1000001;
}
它将自动增加最后一个值。
您还可以定义IDENTITY应该从XYZ编号开始,然后根据需要增加1。
每个数据库都支持IDENTITY功能。
答案 2 :(得分:0)
如果在代码
中生成标识符,请为ID使用GUID或
使用您的数据库...如果您必须使用long类型,那么标识符字段应该是一个自动递增的主键,它在插入时创建唯一的数值(SQL Server的BIGINT类型值。)
答案 3 :(得分:0)
使用
static long lastUserId = 0;