【问题标题】:Violation of PRIMARY KEY constraint 'PK_dbo.ServiceBodyAreas'. Cannot insert duplicate key in object 'dbo.ServiceBodyAreas'违反主键约束“PK_dbo.ServiceBodyAreas”。无法在对象“dbo.ServiceBodyAreas”中插入重复键
【发布时间】:2016-04-27 22:55:56
【问题描述】:

我的数据库中有一个服务表和一个 BodyAreas 表。它们通过多对多关系链接。在这里,我尝试从 CSV 加载服务,其中我也有相关的 BodyAreas。

var record = reader.GetRecord<ServiceModel>();

service.Name = record.Service;
service.Code = record.ID;
service.Description = record.Description;
service.Price = decimal.Parse(record.Price_Uninsured);
service.Specialties = new[]
    {
    context.Specialties.FirstOrDefault(b => b.Name == record.Category),
    };
service.ServiceType = serviceType;
service.BodyAreas = new List<BodyArea>();
string[] items = record.Body_Areas.Split(new char[] { ',' });
foreach (var item in items)
{
    BodyArea bA = context.BodyAreas.Single(x => x.Name == item);
    if (bA != null)
    {
        service.BodyAreas.Add(bA);
    }
}

var entry = context.Entry(service);
if (entry.State == EntityState.Unchanged)
    entry.CurrentValues.SetValues(service);
else
    context.Services.Add(service);

但是当我从包管理器控制台运行 update-database 命令时,我得到了这个错误:

InnerException = {"违反主键约束 'PK_dbo.ServiceBodyAreas'。无法在对象中插入重复键 'dbo.ServiceBodyAreas'。重复键值为 (1, 17)。\r\n 语句已终止。"}

【问题讨论】:

  • 希望你的 Body_Areas 没有重复元素
  • 非常感谢。我现在觉得自己很傻

标签: c# sql-server


【解决方案1】:

确保您没有尝试填写重复值;尽量避免以下代码行中的重复;您可以使用Distinct 获取唯一值;

string[] items = record.Body_Areas.Split(new char[] { ',' });

【讨论】:

    猜你喜欢
    • 2017-06-09
    • 2021-05-08
    • 2019-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多