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);
      }
posted @ 2013-06-09 11:35  梨花驿路  阅读(2296)  评论(0编辑  收藏  举报