C#Entity Framework插入而不是更新

时间:2012-12-15 20:02:34

标签: c# entity-framework-4.1

假设我在'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列表时将客户添加到上下文中。我花了几个小时才发现这个:(

1 个答案:

答案 0 :(得分:0)

这听起来好像您的客户没有唯一的标识符。

在第二个循环中,您应该在添加之前检查“来自文件的客户”是否已经在数据库中(可能基本上是相同的名称,相同的CIC和相同的IndustryCode)。