我的数据库中有一个服务表和一个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;}
答案 0 :(得分:0)
确保您没有尝试填写重复的值;尽量避免在下面的代码行中重复;您可以使用Distinct
获取唯一值;
string[] items = record.Body_Areas.Split(new char[] { ',' });