2016-04-27 4 views
0

Ich habe in meiner Datenbank eine Tabelle von Services und eine Tabelle von BodyAreas. Sie sind durch eine Beziehung vieler zu vielen verbunden. Hier versuche ich, Dienste aus einer CSV zu laden, in der ich auch die zugehörigen BodyAreas habe.Verletzung der PRIMARY KEY-Einschränkung 'PK_dbo.ServiceBodyAreas'. Kann keinen doppelten Schlüssel in Objekt 'dbo.ServiceBodyAreas' einfügen

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); 

Aber wenn ich die Update-Datenbank Befehl aus dem Paket-Manager-Konsole ausführen bekomme ich diesen Fehler:

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

hoffe dein Body_Areas hat kein doppeltes Element – techspider

+0

vielen Dank Mann. Ich fühle mich jetzt sehr dumm –

Antwort

0

Achten Sie darauf, nicht in doppelten Werten zu füllen versuchen; versuche, Duplikate in der folgenden Codezeile zu vermeiden; Sie können Distinct verwenden, um eindeutige Werte zu erhalten.

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