2016-04-27 71 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[] { ',' }); 
相關問題