0
請參閱此代碼段:爲什麼此批量插入不能按預期工作?
while ((line = rdr.ReadLine()) != null)
{
....
Departamento depto = db.Departamento.FirstOrDefault(d => d.DepNombre.Equals(departamento, StringComparison.InvariantCultureIgnoreCase));
if (depto == null)
{
depto = new Departamento();
depto.DepNombre = departamento;
depto.Pais = pais;
depto.DepCreadoEn = DateTime.Now;
db.Departamento.Add(depto);
}
...
}
db.SaveChanges();
正如你看到的,我有一個循環,是將數據插入到表Departamento
在數據庫中。例如,這是從Excel工作表導入記錄。
根據名稱(DepNombre
),「if」是否存在不在數據庫中的記錄。當該名稱存在時,獲取當前對象,以便它不會在數據庫表中出現兩次。
正如您所看到的,出於性能原因,我在迴路後呼叫SaveChanges()
。
好奇的是該對象當前沒有添加到集合中,所以「depto」對象總是返回null,並多次添加該記錄。
例如,數據庫中目前有1條記錄。通過使用即時窗口,我可以撥打db.Departamento.Count()
並找到1條記錄。撥打db.Departamento.Add
後,我撥打相同的Count()
方法,1再次返回。在這種情況下,顯然FirstOrDefault
方法永遠不會返回任何東西。
SaveChanges
調用實際上會使用導入的記錄填充表。
請幫忙嗎?
那麼,你明白爲什麼它不工作,你只是想找人爲你解決它嗎?或者你正在尋找一個解釋,爲什麼它不起作用? – sstan
我需要解決這個錯誤...因爲這個原因,我需要知道爲什麼它不能正常工作....我想如果我將這個對象添加到集合中,它應該在下一個集成中考慮,所以, FirstOrDefault調用將返回它。 – jstuardo
執行添加僅在內存中添加實體。在執行SaveChanges()之前,沒有任何操作被推送到數據庫。因爲在最後(在循環完成後)執行了SaveChanges(),所以循環中的查詢總是返回null,因爲它在數據庫中確實不存在。 – sstan