今天编码过程中遇到这个问题,用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” 而后组织数据,附加到上下文,进行更新.



最新文章

  1. python unicode转中文及转换默认编码
  2. NGUI 新手引导
  3. 【php全局变量和静态变量、静态方法的使用方法】
  4. Android Touch事件传递机制解析
  5. Windows组策略同步问题
  6. Quora的技术探索(转)
  7. 应该知道的25个非常有用的CSS技巧
  8. Java---类反射(2)---类反射加强
  9. (转)dedecms代码详解 很全面
  10. 微软官方的Unity支持组件
  11. PAT (Advanced Level) 1063. Set Similarity (25)
  12. MySQL &#183; 引擎特性 &#183; InnoDB 事务系统
  13. 项目管理器 ProjectManager Beta 10 发布
  14. thymeleaf-迭代
  15. 小米5.0以上系统如何没ROOT激活xposed框架的经验
  16. Mac 下 Eclipse 添加 Dynamic Web Project 并配置 Tomcat
  17. docker 进阶
  18. matlab练习程序(旋转矩阵、欧拉角、四元数互转)
  19. Android中的color使用
  20. jquery validation表单验证插件2。

热门文章

  1. Windows Server 2003 R2 With Sp2 序列号
  2. Integrate-And-Fire Models(转)
  3. Python基础-高阶函数
  4. 剑指offer 面试27题
  5. Redis慢查询,redis-cli,redis-benchmark,info
  6. asp.net 移除Server, X-Powered-By, 和X-AspNet-Version头
  7. C# TreeView,递归循环数据加载到treeView1中
  8. pdo封装2
  9. 简要总结ajax工作原理及优缺点
  10. 记Outlook插件与Web页面交互的各种坑 (含c# HttpWebRequest 连接https 的完美解决方法)