日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

关于Entity Framework中的Attached报错相关解决方案的总结

發(fā)布時間:2023/12/19 编程问答 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 关于Entity Framework中的Attached报错相关解决方案的总结 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

關(guān)于Entity Framework中的Attached報錯的問題,我這里分為以下幾種類型,每種類型我都給出相應(yīng)的解決方案,希望能給大家?guī)硪恍┑膸椭?#xff0c;當(dāng)然作為讀者的您如果覺得有不同的意見或更好的方法,歡迎一起探討!

1.單個實體對象在進行改刪時出現(xiàn)Attached報錯,解決方案,請參見:

http://www.cnblogs.com/zuowj/p/4523075.html

http://www.cnblogs.com/scy251147/p/3688844.html

原理:清除context上本地緩存的與之相關(guān)聯(lián)的實體對象

2.單個實體對象在進行改刪時,其關(guān)聯(lián)的其它實體對象屬性(即:導(dǎo)航屬性)出現(xiàn)Attached報錯,解決方案,請參見:

http://www.cnblogs.com/zuowj/p/4650781.html

原理:清除context上本地緩存所有的實體對象

3.多個不同的實體對象進行改刪時,其自身出錯或其關(guān)聯(lián)的其它實體對象屬性(即:導(dǎo)航屬性)出現(xiàn)Attached報錯,解決方案,如下:

首先增加一個用于清除指定實體對象的context上本地緩存方法,如下:

public void DetachHoldingEntities(params object[] entities){var entries = context.ChangeTracker.Entries().Where(e => e.State != EntityState.Detached).ToList();if (entities == null && entities.Length <= 0) return;foreach (var entity in entities){var entry = entries.SingleOrDefault(e => GetEntityKey(e.Entity).Equals(GetEntityKey(entity)));if (entry != null && entry.Entity != null){entry.State = EntityState.Detached;}}}private EntityKey GetEntityKey(object entity){try{var entityWrapper = entity.GetType().GetField("_entityWrapper").GetValue(entity);//獲取字段_entityWrapper的值var entityWrapperType = entityWrapper.GetType();//獲取字段的類型var entityKey = entityWrapperType.GetProperty("EntityKey").GetValue(entityWrapper, null);//獲取EntityKey屬性的值return (EntityKey)entityKey;}catch{return null;}}

然后在進行改刪前,調(diào)用上述清除方法清除指定的實體即可,示例代碼如下:

ctx.DetachHoldingEntities(entity.TA_CWBankAccountInfo); ctx.GetRepository<TA_CWTransferRequestInfo>().Update(entity);

?當(dāng)然還有一個比較簡單的方法來避免上述錯誤,那就是:使用原生的DbContext進行增、刪操作,更改則由DbContext的自動跟蹤來進行處理,對于不是從DbContext查到的實體對象,若需要參與增刪改時,請先進行Attach操作,否則都是來自于DbContext的實體對象則不需要再進行Attach。

轉(zhuǎn)載于:https://www.cnblogs.com/zuowj/p/5088521.html

總結(jié)

以上是生活随笔為你收集整理的关于Entity Framework中的Attached报错相关解决方案的总结的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。