日期:2014-05-17  浏览次数:20468 次

MVC4诡异啊。。。
本帖最后由 postcha 于 2012-12-12 22:42:37 编辑
先看具体情况:

1:有一个具体的方法,用以在阅读文章时自动给文章的hits字段自动加1

/// <summary>
        /// 更新博文点击数
        /// </summary>
        /// <param name="id">博文ID</param>
        /// <returns></returns>
        public bool UpdateArticleCount(int id)
        {
            var article = db.Articles.Find(id).Hits += 1;
            return db.SaveChanges() > 0;
        }


2:Action中调用:

 public ActionResult Read(int id =0)
        {
            Article item = db.Articles.Find(id);
            if (item == null)
            {
                return HttpNotFound();
            }
            UpdateCount uc = new UpdateCount();
            uc.UpdateArticleCount(id);
            
            return View(item);
        }


3:异常
在访问/read/9,/read/19时,都在“return db.SaveChanges() > 0;”这句报错,如图:


可是在访问其它ID不带9的文章时并不报错,功能也正常。百思不得其解,特来CSDN,请大侠诊断一下,为什么ID中一带9就报错了?

经过断点测试,当ID = 9,19时,db.SaveChanges()返回的是0. 为何?
------解决方案--------------------
跟踪下 数据库的报告看看 查询语句是什么

------解决方案--------------------
var article = db.Articles.Find(id);
article.Hits += 1;

这样呢
------解决方案--------------------
引用:
发现Hits值已经加上1 ,但是在SaveChanges时就出错了。

先用using 单独打开dbcontext, 防止其他的变化引进错误。(你的db是共享的)
也可以用try-catch 看看validationEntity里面的具体错误是什么

            using (var db = new ...)
            {
              var article = db.Articles.Find(id).Hits += 1;
              return db.SaveChanges() > 0;
            }
        }[code=csharp]
[/code]