之前发表过一篇文章题为《关于Entity Framework中的Attached报错的完美解决方案》,那篇文章确实能解决单个实体在进行更新、删除时Attached的报错,注意我这里说的单个实体,指的是要更新或删除的实体不包含其它实体(比如导航属性就包含其它实体),也就是简单POC ...
之前发表过一篇文章题为《关于Entity Framework中的Attached报错的完美解决方案》,那篇文章确实能解决单个实体在进行更新、删除时Attached的报错,注意我这里说的单个实体,指的是要更新或删除的实体不包含其它实体(比如导航属性就包含其它实体),也就是简单POCO对象;但如果不是呢?那么那篇文章里的方法在一定程度上不起作用了,仍会报错,我开始也想不明白,明明通过IsAttached函数判断要更新的实体并未Attached,但进行Attaching时但仍然报错说有相同Key,开始还以为是MS的BUG,后经过多次反复调试发现,报错是对的,因为他报的错并不是我当前要更新的实体,而是该实体中关联的实体,代码与演示报错如下:(仅是演示代码)
public class A{ public get='_blank'>string a{get;set;} public string b{get;set;} public string c{get;set;} public virtual B b{get;set;}}public class B{ public string x{get;set;} public string y{get;set;} public string z{get;set;}}var a1= dbContext.Set<A>().Single();a1.a="test1";dbContext.SaveChanges();dbContext.Detach(a1);//从缓存中移除a1实体;var a2= dbContext.Set<A>().AsNoTracking().Single();a2.a="test2"; dbContext.Set<A>().Attach(a2); //报错,说B相同的KEY已经有AttacheddbContext.Entry(entity).State = EntityState.Modified;dbContext.SaveChanges();
海外公司注册、海外银行开户、跨境平台代入驻、VAT、EPR等知识和在线办理:https://www.xlkjsw.com
原标题:关于Entity Framework中的Attached报错的完美解决方案终极版
关键词:
*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们:
admin#shaoqun.com
(#换成@)。