Entity Framework5.0运行时错误ObjectStateManager 中已存在具有同一键的对象
EF写了个简单的框架,在把查询出来的数据修改回去时,报了ObjectStateManager 中已存在具有同一键的对象这样一个错误,寻寻觅觅终于找到了最终的解决方案。
ObjectStateManager 中已存在具有同一键的对象。ObjectStateManager 无法跟踪具有相同键的多个对象。
说明: 执行当前 Web 请求期间,出现未经处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。
异常详细信息: System.InvalidOperationException: ObjectStateManager 中已存在具有同一键的对象。ObjectStateManager 无法跟踪具有相同
键的多个对象。
网上有资料说是这样先改成未附加状态db.Entry(entity).State = EntityState.Detached,再进行修改。但是我是在基类里面写的方法,传过来的泛型的T,而且我没有把所有的Model都继承自BaseModel,因此T中拿不到主键,也就没办法去数据库中Find这个对象,直接更改更改后的实体对象的状态依然会报错。
所以,这个方法行不通。那只能另想办法了,查找资料之后发现,这是由于查询之后的数据,EF默认帮我们缓存了起来,放在了DbContext上下文中,我们在修改的时候,需要执行操作db.Entry(entity).State = EntityState.Modified; 需要再次的向上下文中附加该实体时候,EF发现该实体已经附加过了,所以会报这个错。所以自然也就有了解决办法。
解决方法,在查询的时候加上asNoTracking() 即可。。。这样,EF就不会缓存查询出来的对象了!
Update方法照样这样写:
public virtual bool Update(T entity)
{
db.Entry(entity).State = EntityState.Modified;
return true;
}
Entity Framework5.0运行时错误ObjectStateManager 中已存在具有同一键的对象的更多相关文章
- Entity Framework中编辑时错误ObjectStateManager 中已存在具有同一键的对象
ObjectStateManager 中已存在具有同一键的对象.ObjectStateManager 无法跟踪具有相同键的多个对象. 说明: 执行当前 Web 请求期间,出现未经处理的异常.请检查堆栈 ...
- EF ObjectStateManager 中已存在具有同一键的对象。ObjectStateManager 无法跟踪具有相同键的多个对象
今天编码过程中遇到这个问题,用EF 更新数据库,将组织好的数据传递到ef的上下文中,本以为附加上去更新,一切就ok了,不过事实证明没这么顺利 ----------------------------- ...
- ObjectStateManager 中已存在具有同一键的对象。ObjectStateManager 无法跟踪具有相同键的多个对象。
问题:ObjectStateManager 中已存在具有同一键的对象.ObjectStateManager 无法跟踪具有相同键的多个对象. 解决方案:在查询的时候加上AsNoTracking()就ok ...
- ASP.NET MVC3更新出错:ObjectStateManager中已存在具有同一键的对象
程序代码: [HttpPost] public ActionResult Edit(Person person) { if (ModelState.IsValid) { Person oldperso ...
- EF ASP.NET MVC 更新出错:ObjectStateManager中已存在具有同一键的对象
解决方案 /// <summary> /// 保存 /// </summary> /// <param name="g"></param& ...
- MVC EF ObjectStateManager 中已存在具有同一键的对象。ObjectStateManager 无法跟踪具有相同键的多个对象。
遇到这个错误 在查询时 加上asNoTracking() 即可
- 数据库中已存在名为 'View_Business' 的对象。
用EF框架+MCF,编译的时候出现:数据库中已存在名为 'View_Business' 的对象. 解决方案: 1.Enable-Migrations2.Add-Migration3.Update-Da ...
- 无法像程序语言那样写SQL查询语句,提示“数据库中已存在名为 '#temp1' 的对象。”
if exists( select exp_count from tbl_expend where exp_valid ),exp_date,) ),) ) begin select exp_coun ...
- android/java 根据当前时间判断股票交易状态(未开盘 交易中 休市中 已收盘)
/** * @param data yyyy-MM-dd HH:mm:ss 时间 * @return 未开盘 交易中 休市中 已收盘 */ public static String getSotckS ...
随机推荐
- 初识backbone.js
backbone,英文意思是:勇气, 脊骨,但是在程序里面,尤其是在backbone后面加上后缀js之后,它就变成了一个框架,一个js库. backbone.js,不知道作者是以什么样的目的来对其命名 ...
- java去掉String里面的空格、换行符等
package com.ynet.utils; import java.util.regex.Matcher; import java.util.regex.Pattern; /** * Create ...
- 一个不错的架构图:基于SpringCloud的微服务项目
https://github.com/hanlin5566/HJ-MicroService
- UML建模—EA创建Use Case(用例图)
用例图主要用来描述“用户.需求.系统功能单元”之间的关系.它展示了一个外部用户能够观察到的系统功能模型图. 1.新建用例图 2.用例图工具: 3.一个简单用例: 用例图所包含的元素如下: 1. Act ...
- 世界、国家、省、城市SQL
共享一份 世界.国家.省.城市最全的SQL(mysql可直接使用),笔者是花了下载币下载的 下载SQL # pid=0 获取所有国家 # pid=99999999 获取中国的省.自治区.直辖 ...
- Node.js之Buffer
JavaScript 语言自身只有字符串数据类型,没有二进制数据类型.但在处理像TCP流或文件流时,必须使用到二进制数据.因此在 Node.js中,定义了一个 Buffer 类,该类用来创建一个专门存 ...
- Hibernate中的session的线程安全问题
SessionFactory的实现是线程安全的,多个并发的线程可以同时访问一 个SessionFactory并从中获取Session实例, 而Session不是线程安全的,Session中包含了数 据 ...
- scss-&父选择器标识符
在使用选择器嵌套的时候有一种情况需要特别注意,先看一段scss代码实例: .text a { color: blue; :hover { color: red } } 也许写此段代码目的是为了将其编译 ...
- stroke和fill顺序对绘图的影响
用canvas绘制线条和填充,fill()和stroke()调用顺序直接影响绘制的结构 先调用stroke在调用fill,绘制的效果看上去lineWidth只绘制出来一半,还以为是个大问题. < ...
- C语言字符数组与字符串
研究几个案例: 输出图案: #include <stdio.h> void main() { ][] = { {', ' ', ' '}, {', ' '}, {'}, {', ' '}, ...