2013-06-04 37 views
5

我在自己的上下文中執行代碼,但它導致數據在主線程上下文中不同步。所以我需要在其他上下文完成工作之後刷新實體,然後才能更新它。實體可能已被修改或刪除,因爲實體被加載

不幸的是,我得到一個OptimisticConcurrencyException,並找不到它是哪個實體是問題,需要刷新?有沒有辦法找出它導致OptimisticConcurrencyException的實體?此消息是沒有幫助在所有...

System.Data.Entity.Infrastructure.DbUpdateConcurrencyException:商店 更新,插入或刪除語句影響的 行意想不到數(0)。實體可能已被修改或刪除,因爲實體 已加載。刷新ObjectStateManager條目。 ---> System.Data.OptimisticConcurrencyException:存儲更新,插入或 刪除語句影響了意外數量的行(0)。自實體被加載後,實體 可能已被修改或刪除。刷新 ObjectStateManager條目。

+0

也許'DbUpdateConcurrencyException.Entries'屬性可以幫助檢測未保存的實體。 –

回答

0

也許最好的解決方案是在其他線程完成後在主線程上下文中創建一個新的context

否則,如果您需要重新使用context,這裏有一個方便的方法來刷新您的上下文對象。

public void RefreshAll() 
    { 
     // Get all objects in state manager with entityKey 
     // (context.Refresh will throw an exception otherwise) 
     var refreshableObjects = (from entry in 
       ObjectContext.ObjectStateManager.GetObjectStateEntries(
                EntityState.Deleted 
                | EntityState.Modified 
                | EntityState.Unchanged) 
            where entry.EntityKey != null 
            select entry.Entity); 

     ObjectContext.Refresh(RefreshMode.StoreWins, refreshableObjects); 
    } 
相關問題