【问题标题】:Violation of PRIMARY KEY constraint Cannot insert duplicate key error?违反 PRIMARY KEY 约束不能插入重复键错误?
【发布时间】:2016-04-14 16:24:14
【问题描述】:

在我看来,我有六个字段 TinNo、CstNo、PanNo、CinNo、ServiceTaxNo、ExciseRegNo。每个字段都有默认 Guid,例如 TinNo 表示(TinNo= FD713788-B5AE-49FF-8B2C-F311B9CB0CC4) .我需要将这六个字段保存在同一列中,但不保存在 TaxInfoTaxField Table 的同一行和同一单元格中。 TaxInfoTaxFiled 表包含 TAXINFOTAXFIELDID、TAXFIELDID、FIELDVALUE,即我需要将这六个字段值(在视图中输入)保存在 FieldValue 列中,并将它们的 id 保存在 TaxFieldID 列中。它需要逐行保存。所以我决定将默认 guid 放在一个列表中,将字段放在另一个列表中,然后在我们想要的地方调用。在 TaxInfoTaxFieldID 中,每一行都有新的新 guid。

TaxField Table

Saving Format

所以我决定将默认 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();
    }

一切正常,但对于第二个循环,我遇到了一个错误 违反主键约束“PK_TaxInfoTaxFiled”。无法在对象“dbo.TaxInfoTaxFiled”中插入重复键。 声明已终止。

在 TaxInfoTaxFieldID 中,它为所有迭代计算相同的 id,所以只有我得到这个错误,我认为是这样。为此我该怎么办?请帮我纠正这个问题?

提前谢谢..

【问题讨论】:

  • 你是只存储一次还是多次???
  • 我为一位客户在同一列中存储多个字段一次
  • TinNo 的值是否对所有客户都不同?
  • 因为它是主键,它需要不同,但您使用的是默认键。这可能是导致此错误的原因。您可能想尝试一些复合键或一些不同的主键
  • 等一下我给你看

标签: javascript c# jquery sql asp.net-mvc-4


【解决方案1】:

您的 taxinfotaxfieldID 将始终是相同的 guid,这就是您收到该错误的原因,您也不应该将主键插入数据库表中,您可以像这样创建 sql 表

创建表税字段 ( TaxInfoTaxFiled INT NOT NULL IDENTITY (1,1) 主键, TaxFieldID varchar(50), 字段值 varchar(50) ) 或者如果您真的想使用 Guid 创建表税字段 ( ID INT NOT NULL IDENTITY (1,1) 主键, TaxInfoTaxFiled 唯一默认 GUID(), TaxFieldID varchar(50), 字段值 varchar(50) )

这样可以避免插入重复的主键。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-06-30
    • 1970-01-01
    • 1970-01-01
    • 2020-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多