1

假设我在“customersFromFile”列表中有 11,000 个客户,在 DB 中有 8000 个客户

使用下面的代码,我希望 EF 将更新 DB 中现有的 8000 个客户,并将剩下的 3000 个添加到 DB

控制台正确打印“更新的客户: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 列表时将客户添加到上下文中的错误。我花了几个小时才发现这个:(

4

1 回答 1

0

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

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

于 2012-12-15T20:11:46.127 回答