违反PRIMARY KEY约束' PK_dbo.ServiceBodyAreas'。无法在对象' dbo.ServiceBodyAreas'中插入重复键。

时间:2016-04-27 14:43:17

标签: c# sql-server

我的数据库中有一个服务表和一个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 = {&#34;违反PRIMARY KEY约束   &#39; PK_dbo.ServiceBodyAreas&#39 ;.无法在对象中插入重复键   &#39; dbo.ServiceBodyAreas&#39 ;.重复键值为(1,17)。\ r \ n   声明已被终止。&#34;}

1 个答案:

答案 0 :(得分:0)

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

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