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 ...
随机推荐
- 自己实现C++的string类
使用C++的朋友对string类都不会陌生,string类使用起来很是方便,比C的字符数组好用多了,但是我们能不能自己实现一个属于自己的string类呢? 实现一个具有基本功能的string类并不难, ...
- dojo入门
1.引入dojo.js dojo的发行包里有4个子目录,要引入的文件是名叫"dojo"的子目录里的dojo.js. 假设你是这样的目录结构: project | +--dojo-l ...
- Unity手册-Unity概述
Unity概述 Unity是一个强大引擎,他自带的多种工具可以满足你多种需求. 这种编辑器是直观的可定制的,让你的工作更大的自由. 原文 Unity is a powerful engine with ...
- 05.while循环的练习
练习1: namespace _05.while循环练习01 { class Program { static void Main(string[] args) { //打印100次"努力学 ...
- C# 面向对象多态的抽象性&接口 object&is as类型转换运算符
抽象类/抽象方法 abstract 抽象的数据类型 抽象类不能被实例化 抽象类中不一定存在抽象方法 抽象方法一定是在抽象类中 抽象类里可以放任意的方法 接口 interface 不是类,就是用来当爹 ...
- python之高阶函数filter
原文 Python内建的filter()函数用于过滤序列. 和map()类似,filter()也接收一个函数和一个序列.和map()不同的是,filter()把传入的函数依次作用于每个元素,然后根据返 ...
- XtraTabPage右键菜单(关闭当前页、关闭其它页、所有关闭的实现)
实现的需求: 用户习惯是一个不可忽略的东西,默认这版的dx的tab也木有右键操作,但用户习惯操作如浏览器都有右键关闭功能,故这里实现先dx的该功能 技术实现: (1)在winform的相应控件内,拖入 ...
- synchronized修饰普通方法和静态方法
首先,要知道,synchronized关键字修饰普通方法时,获得的锁是对象锁,也就是this.而修饰静态方法时,锁是类锁,也就是类名.class. synchronized修饰普通方法 Synchro ...
- Django——model进阶(待完成)
https://www.cnblogs.com/yuanchenqi/articles/7570003.html 一.QuerySet 1.可切片 使用Python 的切片语法来限制查询集记录的数目 ...
- aiohttp模块1 client
Make a Request import aiohttp async with aiohttp.ClientSession() as session: async with session.get( ...