先看具体情况:
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;
这样呢
------解决方案--------------------------------------------------------
先用using 单独打开dbcontext, 防止其他的变化引进错误。(你的db是共享的)
也可以用try-catch 看看validationEntity里面的具体错误是什么
[/code]
using (var db = new ...)
{
var article = db.Articles.Find(id).Hits += 1;
return db.SaveChanges() > 0;
}
}[code=csharp]