违反PRIMARY KEY约束无法插入重复的主键

时间:2014-02-28 05:32:55

标签: asp.net-mvc asp.net-mvc-4 primary-key

我从控制器

以这种方式生成用户ID
long 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;
}

当任何两个人同时注册并点击控制器时,我现在得到了密钥违规错误该怎么办?

4 个答案:

答案 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;