zoukankan      html  css  js  c++  java
  • 编译器错误~不能向ObjectStateManager添加相同的键

    产生这个问题的原因,其时是由我们的习惯引起的,一般说过,我们的update操作是这样的

    1 从数据表把数据获出来

    2 修改取出现的实体值

    3 发回给数据表,更新成功

    这看上去没有问题,但在EF环境中就会产生问题,因为当你取实体时,默认情况下EF会向ObjectStateManager提交一种跟踪机制,即向它里面添加了一个键值,

    而当你调用update时,这时它已经有这个键值了,所有出现异常也很正常。

    解决方法1:

    不使用上面的逻辑,直接将实体附加到数据上下文中,这是可以的

    解决方法2:

    在获取单条实体时,取消实体跟踪,扩展方法是AsNoTracking(),这时不会向ObjectStateManager添加键值,在更新时,就不会出现这会异常了


    呵呵,有时这些ORM框架给我们设了不少陷阱,然后等待我们自己去挖出这个陷阱,然后,自己再跳进去,这让我想起了苏轼的一首诗:

    横看成岭侧成峰, 
    远近高低各不同; 
    不识庐山真面目, 
    只缘身在此山中 
  • 相关阅读:
    Spring Boot 搭建项目阶段Group和Artifact的含义
    设置Mysql数据库账号密码以及时区
    反射
    线程与进程
    网络编程
    队列和栈
    linux下的mysql
    积累的关于linux的安装卸载软件基本命令
    各种url编码
    解决浏览器传值乱码
  • 原文地址:https://www.cnblogs.com/lori/p/2735615.html
Copyright © 2011-2022 走看看