2016-04-27 66 views
0

我在我的数据库中有一个Services表和一个BodyAreas表。他们通过多对多的关系相连。在这里,我试图从CSV中加载服务,我也有相关的BodyAreas。违反PRIMARY KEY约束'PK_dbo.ServiceBodyAreas'。不能在对象'dbo.ServiceBodyAreas'中插入重复键'

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 = {"Violation of PRIMARY KEY constraint 'PK_dbo.ServiceBodyAreas'. Cannot insert duplicate key in object 'dbo.ServiceBodyAreas'. The duplicate key value is (1, 17).\r\nThe statement has been terminated."}

+1

希望你的Body_Areas没有重复的元素 – techspider

+0

非常感谢很多人。我现在感觉非常愚蠢 –

回答

0

确保你是不是要填写重复值;尽量避免在下面的代码行中重复;你可以使用Distinct来获得唯一的值;

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