问题描述
//删除方法publicActionResultDelPermission(){stringstrPId=Request.Form["pid"];try{intpid=int.Parse(strPId);//根据id去删除intres=OperateContext.Current.BllSession.IOu_PermissionBLL.DelBy(p=>p.pid==pid);returnOperateContext.Current.RedirectAjax("ok","恭喜,删除成功..",null,"");}catch(Exceptione){returnOperateContext.Current.RedirectAjax("err","您现在删除的权限正在被角色使用,请先取消角色中的这个权限!",null,"");}finally{}}#endregion//修改方法[HttpPost]publicActionResultEditPermission(MODEL.Ou_Permissionmodel){OperateContext.Current.BllSession.IOu_PermissionBLL.RestartContext();//去数据库修改intres=OperateContext.Current.BllSession.IOu_PermissionBLL.ModifyBy(model,p=>p.pid==model.pid,newstring[]{"pParent","pName","pAreaName","pControllerName","pActionName","pFormMethod","pOperationType","pOrder","pIsShow","pRemark"});if(res>0){returnRedirect("/admin/sys/Permission?ok");}else{returnRedirect("/admin/sys/Permission?err");}}#endregion
1运行项目后一上来直接修改没有问题,删除成功后编辑也不会出问题2故意让删除出错后,再编辑哪一条都会出问题3再编辑就成这样了4.经过调试,发现在dal层的ef的上下文中有删除状态的缓存问题的重点来了,怎么清空这个ef中的缓存啊,也就是要清除那个什么deletedEnitityStroe,找了半天没找到什么好方法
解决方案
解决方案二:
ef的context对象的.Refresh(System.Data.Objects.RefreshMode.StoreWins);方法;你的这个错,感觉是外键关联到别的表里,其他表里的数据没删,你就想删主表里的数据啊。不过,你们这个框架,在web的服务器端为context做了缓存,目的是便于数据更新,但实际会发生各种问题。正确的做法还是应该通过每次newcontext后attatch上去要处理的实体对象。
解决方案三:
使用事务操作,在catch内进行ROLLBACK操作