日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) >

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

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

關(guān)于Entity Framework中的Attached報(bào)錯(cuò)的問(wèn)題,我這里分為以下幾種類(lèi)型,每種類(lèi)型我都給出相應(yīng)的解決方案,希望能給大家?guī)?lái)一些的幫助,當(dāng)然作為讀者的您如果覺(jué)得有不同的意見(jiàn)或更好的方法,歡迎一起探討!

1.單個(gè)實(shí)體對(duì)象在進(jìn)行改刪時(shí)出現(xiàn)Attached報(bào)錯(cuò),解決方案,請(qǐng)參見(jiàn):

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

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

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

2.單個(gè)實(shí)體對(duì)象在進(jìn)行改刪時(shí),其關(guān)聯(lián)的其它實(shí)體對(duì)象屬性(即:導(dǎo)航屬性)出現(xiàn)Attached報(bào)錯(cuò),解決方案,請(qǐng)參見(jiàn):

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

原理:清除context上本地緩存所有的實(shí)體對(duì)象

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

首先增加一個(gè)用于清除指定實(shí)體對(duì)象的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();//獲取字段的類(lèi)型var entityKey = entityWrapperType.GetProperty("EntityKey").GetValue(entityWrapper, null);//獲取EntityKey屬性的值return (EntityKey)entityKey;}catch{return null;}}

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

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

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

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

總結(jié)

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

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