EF ObjectStateManager 中已存在具有同一键的对象。ObjectStateManager 无法跟踪具有相同键的多个对象
今天编码过程中遇到这个问题,用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 无法跟踪具有相同键的多个对象的更多相关文章
- ObjectStateManager 中已存在具有同一键的对象。ObjectStateManager 无法跟踪具有相同键的多个对象。
问题:ObjectStateManager 中已存在具有同一键的对象.ObjectStateManager 无法跟踪具有相同键的多个对象. 解决方案:在查询的时候加上AsNoTracking()就ok ...
- Entity Framework5.0运行时错误ObjectStateManager 中已存在具有同一键的对象
EF写了个简单的框架,在把查询出来的数据修改回去时,报了ObjectStateManager 中已存在具有同一键的对象这样一个错误,寻寻觅觅终于找到了最终的解决方案. ObjectStateManag ...
- ASP.NET MVC3更新出错:ObjectStateManager中已存在具有同一键的对象
程序代码: [HttpPost] public ActionResult Edit(Person person) { if (ModelState.IsValid) { Person oldperso ...
- Entity Framework中编辑时错误ObjectStateManager 中已存在具有同一键的对象
ObjectStateManager 中已存在具有同一键的对象.ObjectStateManager 无法跟踪具有相同键的多个对象. 说明: 执行当前 Web 请求期间,出现未经处理的异常.请检查堆栈 ...
- EF ASP.NET MVC 更新出错:ObjectStateManager中已存在具有同一键的对象
解决方案 /// <summary> /// 保存 /// </summary> /// <param name="g"></param& ...
- MVC EF ObjectStateManager 中已存在具有同一键的对象。ObjectStateManager 无法跟踪具有相同键的多个对象。
遇到这个错误 在查询时 加上asNoTracking() 即可
- EF ObjectStateManager无法跟踪具有相同键的多个对象 标签: EasyUIc# 2015-09-05 11:01 1181人阅读
最近做一个项目,因为是重构,好多代码是搬过来的,但是因为框架不同,所以搬过来也出现了很多问题,前几天在调试的时候,就碰到一个EF框架经常出现的问题:ObjectStateManager中已存在具有同一 ...
- EF Core 中多次从数据库查询实体数据,DbContext跟踪实体的情况
使用EF Core时,如果多次从数据库中查询一个表的同一行数据,DbContext中跟踪(track)的实体到底有几个呢?我们下面就分情况讨论下. 数据库 首先我们的数据库中有一个Person表,其建 ...
- EF Core 中DbContext不会跟踪聚合方法和Join方法返回的结果,及FromSql方法使用讲解
EF Core中: 如果调用Queryable.Count等聚合方法,不会导致DbContext跟踪(track)任何实体. 此外调用Queryable.Join方法返回的匿名类型也不会被DbCont ...
随机推荐
- maven的安装以及查看是否安装成功
Maven安装教程详解 一.准备工作 1.确定电脑上已经成功安装jdk7.0以上版本 2.win10操作系统 3.maven安装包 下载地址:http://maven.apa ...
- Linux 使用pppd和ppp程序进行3G/4G拨号
试验环境:Linux marsboard 3.4.90 #9 SMP PREEMPT Thu Mar 3 18:28:43 CST 2016 armv7l armv7l armv7l GNU/Linu ...
- NPOI 导入 导出
using NPOI.XSSF.UserModel; using System.IO; 导入 /// <summary> /// Excel转换DataTable /// </s ...
- javaweb学习纲要
Java Web 概述 大纲: 1.C/S体系结构 2.B/S体系机构 3.两种体系结构比较 4.主流的Web程序应用平台 5.java web学习路线图 1.C/S体系结构 C/S是Client/ ...
- 安装好MySQL后就开始学习如何后台创建自己的数据库吧!
MySQL创建数据库的方式不像SQL Server那样有图形界面,而是使用DOS窗口创建的,接下来就是创建MySQL数据库的具体步骤. ↓↓↓↓↓↓↓↓ ↓↓↓↓↓↓↓↓ ↓↓↓↓ ...
- $Java HttpClient库的使用
(一)简介 HttpClient是Apache的一个开源库,相比于JDK自带的URLConnection等,使用起来更灵活方便. 使用方法可以大致分为如下八步曲: 1.创建一个HttpClient对象 ...
- comet4j开发指南
http://blog.csdn.net/majian_1987/article/details/8489738 好多朋友反映,因排版问题,文章部分边缘内容无法查看.尝试过排版,但仍无法显示正常,所以 ...
- 大话设计模式之PHP篇 - 观察者模式
定义观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象,这个主题对象在状态发生改变时,会通知所有观察者对象,使他们能够自动更新自己. <?php /*主题类或称为通知类 ...
- linux开发应用程序到运行的过程
1.给linux配置交叉编译环境 2.在windows下使用source insight写程序,一共有m个h文件,n个c文件,k个main函数 3.将源代码放在linux里 4.在源代码文件夹里新建m ...
- Python 条件判断语句(if ,elif, else)
条件判断可以分: 单分支判断:只有一个if语句 双分支判断:if else 的格式 多分支判断:if elif else 的格式 条件语句嵌套判断 # 下面是个条件多分支判断 score = 85 ...

