违反PRIMARY KEY约束无法插入重复的密钥错误
本文关键字:密钥 错误 插入 PRIMARY KEY 约束 违反 | 更新日期: 2023-09-27 18:29:36
我的视图中有六个字段TinNo、CstNo、PanNo、CinNo、ServiceTaxNo、ExciseRegNo。每个字段都有默认的Guid,例如TinNo表示(TinNo=FD713788-B5AE-49FF-8B2C-F311B9CB0CC4)。我需要将这六个字段保存在TaxInfoTaxField表的同一列中,但不在同一行和同一单元格中。TaxInfoTaxFiled表包含TAXINFOTAXFIELDID、TAXFIELDDID、FIELDVALUE,也就是说,我需要将这六个字段值(在视图中输入)保存在FIELDVALUE列中,并将它们的id保存在TAXFIELDID栏中。它需要逐行保存。所以我决定把默认的guid放在一个列表中,把字段放在另一个列表,然后调用我们想要的地方。在TaxInfoTaxFieldID中,每一行都有新的guid。
TaxField表
保存格式
所以我决定把默认GUID放在一个列表中,把6个字段放在另一个列表中
ArrayList objValue = new ArrayList();
{
objValue.Add(TITFVM.TinNo);
objValue.Add(TITFVM.CstNo);
objValue.Add(TITFVM.PanNo);
objValue.Add(TITFVM.CinNo);
objValue.Add(TITFVM.ExciseRegNo);
objValue.Add(TITFVM.ServiceTaxNo);
}
List<Guid> LG = new List<Guid>();
LG.Add(new Guid("FD713788-B5AE-49FF-8B2C-F311B9CB0CC4"));
LG.Add(new Guid("64B512E7-46AE-4989-A049-A446118099C4"));
LG.Add(new Guid("376D45C8-659D-4ACE-B249-CFBF4F231915"));
LG.Add(new Guid("59A2449A-C5C6-45B5-AA00-F535D83AD48B"));
LG.Add(new Guid("03ADA903-D09A-4F53-8B67-7347A08EDAB1"));
LG.Add(new Guid("2F405521-06A0-427C-B9A3-56B8931CFC57"));
var taxinfotaxfieldID = Guid.NewGuid();
var listFiled = new List<TaxInfoTaxFiled>();
for (var item = 0; item < objValue.Count; item++)
{
TaxInfoTaxFiled taxInfoObj = new TaxInfoTaxFiled()
{
TaxInfoTaxFieldID = taxinfotaxfieldID,
TaxFieldID = new Guid(LG[item].ToString()),
FieldValue = objValue[item].ToString()
};
listFiled.Add(taxInfoObj);
db.TaxInfoTaxFileds .Add(taxInfoObj);
db.SaveChanges();
}
return View();
}
一切都很好,但第二个循环我有一个错误违反PRIMARY KEY约束"PK_TaxInfoTaxFiled"。无法在对象"dbo.TaxInfoTaxFiled"中插入重复的键。语句已终止
在TaxInfoTaxFieldID中,它为所有迭代计算相同的id,所以只有我得到了这个错误,我认为是这样。为此,我该怎么办?请帮我纠正这个问题?
预付款谢谢。。
您的taxinfotaxfieldID将始终是相同的guid,这就是您出现该错误的原因。此外,您不应将主键插入数据库表中,您可以创建类似的sql表
创建表TaxField(TaxInfoTaxFiled INT NOT NULL IDENTITY(1,1)主键,TaxFieldID varchar(50),字段值varchar(50))或者如果你真的想使用Guid创建表TaxField(ID INT NOT NULL IDENTITY(1,1)主键,TaxInfoTaxFiled唯一默认GUID(),TaxFieldID varchar(50),字段值varchar(50))
这样可以避免插入主键重复项。