Asp.net MVC+Entity Framework6开发的应用程序,代码非常简单:
using (var ef=new EFEntities())
{
var user = ef.User.FirstOrDefault(t => t.Name == "aauser");
user.Phone="123";
ef.SaveChanges()
}
由于没有数据库的Update权限,当执行数据的修改时,浏览器一直在等待响应,查看IIS7,发现占用CPU很高,好像陷入死循环了一样,但是只要把Update权限放开就非常快,这是什么原因呢?为什么也不提示出错原因?有什么办法让EF快速的返回结果,不用半天没响应,还不出错!
哪位大侠遇到过,指点一下!
1.没有添加到上下文中能更新?
2.没有Update权限为什么还要更新?
3.要快速返回,用异步试试?
如果有权限是可以修改的,问题是数据库权限控制的太严格,EF又不给提示,这排查问题就悲催了,白白浪费大好时光啊!
由于调用SaveChanges时会自动DetectChanges方法来检测数据是否已经更改,接着就是更新数据到数据库,但是此时你未设置到数据库的Update更新的权限,所以此时ef上下文一直处于更新数据到数据库的状态,但是又未成功更新,这中情况下可能就会导致类似于所谓的死循环!!
就是啊,不用EF的话是会“直接提示你没有权限”的哦?用了EF就死循环了,还不给提示,这以后还怎么排查问题啊?
@slmk: 这不是EF的问题,完全是数据库层面上的问题,是你数据库给堵死了更新的路,能怪EF吗!!
@Recluse_Xpy: 都死循环了还不是EF的问题,哈哈!
@slmk: 无意义的狡辩!
我告诉你MVC没有超时的,你可以有2种办法实现超时,报出异常