zoukankan      html  css  js  c++  java
  • 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);
          }
  • 相关阅读:
    第十五周学习进度
    梦断代码阅读笔记03
    第二阶段绩效评估
    团队十日冲刺20
    团队十日冲刺19
    团队十日冲刺18
    Java中的变量之成员变量、本地变量与类变量
    Java中new一个对象是一个怎样的过程?JVM中发生了什么?
    HashMap三百问
    容器之List接口下各实现类(Vector,ArrayList 和LinkedList)的线程安全问题
  • 原文地址:https://www.cnblogs.com/joeylee/p/3128357.html
Copyright © 2011-2022 走看看