今天编码过程中遇到这个问题,用EF 更新数据库,将组织好的数据传递到ef的上下文中,本以为附加上去更新,一切就ok了,不过事实证明没这么顺利

  ---------------------------------------------

ObjectStateManager 中已存在具有同一键的对象。ObjectStateManager 无法跟踪具有相同键的多个对象

  ---------------------------------------------

看了很多博文,总结原因是当前上下文中已经包含了这一条记录,而且是出于被跟踪状态,所以不能再附加具有相同键的对象

 
很多人都遇到了这个问题,各有各的解决办法,在这个链接博文的启发下,因为需求不同故做了一点小小修改;山人自有妙计
找到了一个相似的解决方案

记录一下我自己的情况的解决方案:
 //update
public virtual bool Update(T entity)
{
//子类重写
return true;
}

将BaseDal 中实现 接口 Update 的方法变成虚方法,然后让每一个子类去重写这个方法(如下);

 public override bool Update(LYMX lymx)
{
var entity = datamodelcontainer.Set<LYMX>().Find(lymx.ZSGBH);
if (entity != null)
{
datamodelcontainer.Entry<LYMX>(entity).State = System.Data.EntityState.Detached; //这个是在同一个上下文能修改的关键
}
// 组织需要的数据
entity.RCBABH = lymx.RCBABH;
entity.ZSZT = lymx.ZSZT;
entity.GXSJ = DateTime.Now; datamodelcontainer.Set<LYMX>().Attach(entity);
datamodelcontainer.Entry(entity).State = EntityState.Modified;
return true; //datamodelcontainer.SaveChanges() > 0;
}

首先通过lymx 的逐渐,取得上下文中的这一条记录,将状态修改成“System.Data.EntityState.Detached” 而后组织数据,附加到上下文,进行更新.



EF ObjectStateManager 中已存在具有同一键的对象。ObjectStateManager 无法跟踪具有相同键的多个对象的更多相关文章

  1. ObjectStateManager 中已存在具有同一键的对象。ObjectStateManager 无法跟踪具有相同键的多个对象。

    问题:ObjectStateManager 中已存在具有同一键的对象.ObjectStateManager 无法跟踪具有相同键的多个对象. 解决方案:在查询的时候加上AsNoTracking()就ok ...

  2. Entity Framework5.0运行时错误ObjectStateManager 中已存在具有同一键的对象

    EF写了个简单的框架,在把查询出来的数据修改回去时,报了ObjectStateManager 中已存在具有同一键的对象这样一个错误,寻寻觅觅终于找到了最终的解决方案. ObjectStateManag ...

  3. ASP.NET MVC3更新出错:ObjectStateManager中已存在具有同一键的对象

    程序代码: [HttpPost] public ActionResult Edit(Person person) { if (ModelState.IsValid) { Person oldperso ...

  4. Entity Framework中编辑时错误ObjectStateManager 中已存在具有同一键的对象

    ObjectStateManager 中已存在具有同一键的对象.ObjectStateManager 无法跟踪具有相同键的多个对象. 说明: 执行当前 Web 请求期间,出现未经处理的异常.请检查堆栈 ...

  5. EF ASP.NET MVC 更新出错:ObjectStateManager中已存在具有同一键的对象

    解决方案 /// <summary> /// 保存 /// </summary> /// <param name="g"></param& ...

  6. MVC EF ObjectStateManager 中已存在具有同一键的对象。ObjectStateManager 无法跟踪具有相同键的多个对象。

    遇到这个错误  在查询时 加上asNoTracking() 即可

  7. EF ObjectStateManager无法跟踪具有相同键的多个对象 标签: EasyUIc# 2015-09-05 11:01 1181人阅读

    最近做一个项目,因为是重构,好多代码是搬过来的,但是因为框架不同,所以搬过来也出现了很多问题,前几天在调试的时候,就碰到一个EF框架经常出现的问题:ObjectStateManager中已存在具有同一 ...

  8. EF Core 中多次从数据库查询实体数据,DbContext跟踪实体的情况

    使用EF Core时,如果多次从数据库中查询一个表的同一行数据,DbContext中跟踪(track)的实体到底有几个呢?我们下面就分情况讨论下. 数据库 首先我们的数据库中有一个Person表,其建 ...

  9. EF Core 中DbContext不会跟踪聚合方法和Join方法返回的结果,及FromSql方法使用讲解

    EF Core中: 如果调用Queryable.Count等聚合方法,不会导致DbContext跟踪(track)任何实体. 此外调用Queryable.Join方法返回的匿名类型也不会被DbCont ...

随机推荐

  1. Way to OpenSource

    @1:Follow any instructions in the readme and make sure that you can configure and run the project on ...

  2. Funq之Lambda表达式入门

    今天接受了一个Tranning关于.net3.5 framework中的new feature. 其中最不明白的还是Lambda表达式.回来后又仔细的思考了一番,总算有点体会在这里写一下.既然是入门, ...

  3. PHPExcel常用属性使用

    PHPExcel常用属性使用  前景: 需先实例化几个变量: $this->objExcel = new PHPExcel(); //实例化一个PHPExcel变量 $this->objE ...

  4. Linux Shell基础 单引号、双引号、反引号、小括号和大括号

    单引号和双引号 单引号和双引号用于变量值出现空格时将字符用引号括起来. 二者的主要区别在于, 被单引号括起来的字符都是普通字符,就算特殊字符也不再有特殊含义: 被双引号括起来的字符中,"$& ...

  5. android 加固防止反编译-重新打包

    http://blog.csdn.net/u010921385/article/details/52505094 1.需要加密的Apk(源Apk) 2.壳程序Apk(负责解密Apk工作) 3.加密工具 ...

  6. @MarkFan 口语练习录音 20140415 [MDL演讲口语录音]

    Hi,everybody! 今天是2014年4月14日, 现在是晚上十一点零柒分. 一本励志的书,一场振奋人心的演讲,一次推心置腹的谈话, 最多只是在你背后小推你一下,最终决定是否迈出前进的步伐, 以 ...

  7. JavaWeb Session

    1. Session概述 1.1. 什么是Session Session一般译为会话,是解决Http协议的无状态问题的方案,可以将一次会话中的数据存储在服务器端的内存中,保证在下一次的会话中可以使用. ...

  8. Linux下Python科学计算包numpy和SciPy的安装

      系统环境: OS:RedHat5 Python版本:Python2.7.3 gcc版本:4.1.2 各个安装包版本: scipy-0.11.0 numpy-1.6.2 nose-1.2.1 lap ...

  9. mongodb的使用(入门)

    1.登录mongodb ./bin/mongo 2.查看所有数据库 show dbs  ##默认有admin  和  local两个库 3.创建数据库 use test #创建数据库后,如果不写入数据 ...

  10. spring security在spring mvc的action中获取登录人信息

    @RequestMapping("/index") public ModelAndView login( @RequestParam(value = "error&quo ...