2012-12-15 61 views
1

讓說我有11,000多個客戶列表中的「customersFromFile」和8000個客戶DBC#實體框架插入,而不是更新

與下面的代碼,我希望EF將更新現有的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列表。我花了時間,發現這個:(

+0

啊,對不起,這個問題在哪裏?它不是因爲它需要添加,而是因爲你添加。 ,進行更新 – TomTom

回答

0

這聽起來像是你有你的客戶沒有唯一標識符。

在第二循環中,你應該檢查一下「客戶從文件」是不是已經在DB在添加它之前(可能基本上是相同的名稱,相同的CIC和相同的IndustryCode)

+0

我在數據庫中有一個CustomerID作爲PrimaryKey – ngchieu

+0

這是不一樣的 - 你如何在邏輯上識別custoemr?Custome rnumber?EF添加它是因爲你添加它。 – TomTom