EF SaveChanges(),报错 更新条目出错,查看EF详细错误信息,以及如何清除掉EF上下文中错误的信息
背景:从博客园采集文章的时候,我先采集MVC分类下的文章,再采集首页推荐的文章,难免会有重复的信息,所以在数据库的约束里面对文章的标题做了重复约束,那么在EF保存的时候,我试用了try catch 来接住是不是 重复保存出错了
for(这外面有个循环,不停的读取博客园首页推荐的文章)
{
db.Blog.AddObject(blog);try
{db.SaveChanges();}catch (Exception e){throw e.InnerException;
}
}
当有重复项的时候,错误信息被接住,但是当我循环到下一条文章的时候,即使这个新的文章在数据库中并不存在,但是保存依然出错,后面才理解,为什么新文章不存在重复项,但是为什么还是报数据重复的错误呢?
原因是之前,我们上面 的 db.Blog.AddObject(blog); 这个是将一个实体,保存到EF的上下文中,然后后面执行Save的时候,虽然catch住了错误信息,但是刚才添加进来的重复的实体信息,依旧在EF的上下文里面,下个循环到SaveChanges的时候,错误的实体依旧被提交了上去,所以导致依旧抱重复错误,解决方法就是catch错误后,把错误的实体,从EF的上下文中删除即可。
正确的解决方法如下:
db.Blog.AddObject(blog); try { db.SaveChanges(); } catch (Exception e) { // throw e.InnerException; db.Blog.DeleteObject(blog); }