我想處理一個批量插入過程中的情況,其中可能存在具有相同主鍵的實體,這當然會導致SaveChanges拋出異常。分離一個實體並在另一次嘗試上保存上下文
這是我有:(計數隨着時間的foreach循環迭代次數下降)
try
{
_context.SaveChanges();
_context.Dispose();
_context = null;
_context = SelectContext<T>();
_commitCount = 0;
}
catch (System.Data.UpdateException updateEx)
{
//Remove from _context all the entries that errored in the SaveChange() process...
if (updateEx.StateEntries != null)
{
foreach (ObjectStateEntry stateEntry in updateEx.StateEntries)
{
if ((System.Data.EntityState)stateEntry.Entity.GetType().GetProperty("EntityState").GetValue(stateEntry.Entity, null) != System.Data.EntityState.Detached)
{
_context.Detach(stateEntry.Entity);
}
}
}
//Save context changes again this time without erroneous entries...
try
{
_context.SaveChanges();
_context.Dispose();
_context = null;
_context = SelectContext<T>();
_commitCount = 0;
}
catch (Exception ex)
{
//Welp, at the point, I'm clueless...
}
如果我看在ObjectStateManager,實體確實去除
但它仍然在第二次嘗試中拋出一個異常,喋喋不休地發出一聲嘟PK。
我認爲分離一個實體的原理是一樣的,如果它從來沒有在上下文中。我需要做其他事嗎?
謝謝。
任何你不想檢查對象是否存在之前的原因? –
究竟哪個對象? –
你可以檢查實體是否存在於分貝之前添加?我認爲它比添加更好,並且在catch中分離 –