2016-04-27 35 views
0

私はデータベースにBodyAreasのテーブルとサービスのテーブルを持っています。それらは、多対多の関係によってリンクされています。ここでは、関連するBodyAreasも持っているCSVからサービスをロードしようとしています。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); 

しかし、私はパッケージマネージャコンソールからアップデート-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[] { ',' }); 
関連する問題