假设我在'customersFromFile'列表中有11,000个客户,在DB中有8000个客户
使用下面的代码,我希望EF将更新数据库中现有的8000个客户,并向数据库添加3000个
控制台正确打印“更新客户:8000”和“已添加到客户:3000
”然而,在DB中,我现有总共19000个客户,尽管现有8000个已成功更新。
请帮我解决这个问题。
DEMOEntities context = new DEMOEntities();
context.Configuration.AutoDetectChangesEnabled = false;
context.Configuration.ValidateOnSaveEnabled = false;
int i = 0;
foreach (var customerInDB in context.Customers)
{
//Console.WriteLine("Update customer: " + customerInDB.CustomerID.ToString());
customerInDB.Name = customersFromFile[i].Name;
customerInDB.CIC = customersFromFile[i].CIC;
customerInDB.IndustryCode = customersFromFile[i].IndustryCode;
context.Entry(customerInDB).State = EntityState.Modified;
i++;
}
Console.WriteLine("Updated customers: " + i.ToString());
int j = 0;
for (; i < customersFromFile.Count; i++)
{
context.Customers.Add(customersFromFile[i]);
j++;
}
Console.WriteLine("Added to customer:" + j.ToString());
Console.WriteLine("Saving changes to customer...");
context.SaveChanges();
更新2:感谢TomTom的回答,我错误地在构成CustomerFromFile列表时将客户添加到上下文中。我花了几个小时才发现这个:(
答案 0 :(得分:0)
这听起来好像您的客户没有唯一的标识符。
在第二个循环中,您应该在添加之前检查“来自文件的客户”是否已经在数据库中(可能基本上是相同的名称,相同的CIC和相同的IndustryCode)。