【发布时间】:2017-07-07 06:23:47
【问题描述】:
ASP 对特定 ID 产生违反 PRIMARY KEY 约束。 (我在代码中随机生成 ID,同时检查它们在数据库中不存在)。
当我在本地计算机(使用相同的 Azure 托管数据库)上调试此代码时,一切正常。当我在 Azure 上发布我的代码时,我得到了错误。奇怪的是,由错误产生的随机 ID 在我的数据库中不存在。
代码(我复制了一个带有新 ID 和新方案 ID 的药物列表):
List<medication> l = db.medication.AsNoTracking().Where(x => x.scheme_ID == schemeID).ToList();
foreach (medication m in l) {
int id = generateUniqueMedicationID();
m.ID = id;
m.scheme_ID = newSchemeID;
db.medication.Add(m);
}
db.SaveChanges();
generateUniqueMedicationID() 方法:
private int generateUniqueMedicationID()
{
bool stop = true;
int id = -1;
while (stop)
{
Random r = new Random();
id = r.Next(100000000, 1000000000);
if (!db.medication.Any(o => o.ID == id)) stop = false;
}
return id;
}
【问题讨论】:
-
SQL server的表中PK列是如何定义的?
-
generateUniqueMedicationID看起来像什么?为什么不遵循标准 C# 命名约定? -
将你的表
Primary Key设置为Identity(1,1),这样每次在表中添加一行时它就会自动递增。 -
当数据库说你有主键违规时,你没有想过检查你生成的 ID 是否真的是唯一的吗?
标签: c# random primary-key