EF ObjectStateManager 中已存在具有同一鍵的對象。ObjectStateManager 無法跟蹤具有相同鍵的多個對象


今天編碼過程中遇到這個問題,用EF 更新數據庫,將組織好的數據傳遞到ef的上下文中,本以為附加上去更新,一切就ok了,不過事實證明沒這么順利

 

  ---------------------------------------------

ObjectStateManager 中已存在具有同一鍵的對象。ObjectStateManager 無法跟蹤具有相同鍵的多個對象

  ---------------------------------------------

 

看了很多博文,總結原因是當前上下文中已經包含了這一條記錄,而且是出於被跟蹤狀態,所以不能再附加具有相同鍵的對象

 
很多人都遇到了這個問題,各有各的解決辦法,在這個鏈接博文的啟發下,因為需求不同故做了一點小小修改;山人自有妙計
找到了一個相似的解決方案

 


記錄一下我自己的情況的解決方案:
 //update
        public virtual bool Update(T entity)
        {
            //子類重寫
            return true;
        }
 
        

將BaseDal 中實現 接口 Update 的方法變成虛方法,然后讓每一個子類去重寫這個方法(如下);

 public override bool Update(LYMX lymx)
        {
            var entity = datamodelcontainer.Set<LYMX>().Find(lymx.ZSGBH);
            if (entity != null)
            {
                datamodelcontainer.Entry<LYMX>(entity).State = System.Data.EntityState.Detached; //這個是在同一個上下文能修改的關鍵
            }
            // 組織需要的數據
            entity.RCBABH = lymx.RCBABH;
            entity.ZSZT = lymx.ZSZT;
            entity.GXSJ = DateTime.Now;

            datamodelcontainer.Set<LYMX>().Attach(entity);
            datamodelcontainer.Entry(entity).State = EntityState.Modified;
            return true; //datamodelcontainer.SaveChanges() > 0;
        }

首先通過lymx 的逐漸,取得上下文中的這一條記錄,將狀態修改成“System.Data.EntityState.Detached” 而后組織數據,附加到上下文,進行更新.

 






免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM