0
我正在使用使用EF 4.1的Windows服務。它從Web服務中讀取數據,並每隔4個小時左右將其插入一個Cache表中。大約3k行av。在EF 4.1中使用TRUNCATE如何刷新對象管理器
我擁有它使用EF 4.1刪除所有行然後以std EF 4.1方式添加所有行。工作正常,即
....
foreach (var entityI in entityList)
{
_dbContext.GetDbSet<T>().Remove(entityI);
}
SaveChanges();
....
foreach (var entityI in entityList)
{
_dbContext.GetDbSet<T>().Add(entityI);
}
SaveChanges();
我試圖做的是使用truncate table的,而不是刪除,但是當我這樣做,將truncate table完美的作品,但添加的行話說失敗的對象管理器是合拍的。
_dbContext.ExecuteSqlCommand("TRUNCATE TABLE " + entityName);
對數據庫的更改已成功提交,但更新對象上下文時發生錯誤。 ObjectContext可能處於不一致的狀態。內部異常消息:由於對象的鍵值與ObjectStateManager中的另一個對象衝突,因此AcceptChanges無法繼續。在調用AcceptChanges之前確保鍵值是唯一的。
如何告訴EF對象管理器我截斷了表中的所有行?
有過類似的想法。儘管我可以使用GetObjectByKey找到它們,但沒有條目從GetObjectStateEntries返回。但後來無法分離。 –
最後得到的行返回,但現在說該對象不能被分離,因爲它沒有連接。附加我需要一個IEntityWithKey。 –
你可以在做截斷命令後嘗試做一個objectContext.Refresh(RefreshMode.StoreWins,objectContext。)嗎?這應該重新加載數據存儲中的實體,該實體應該是空的。 –
scheien