ASP.NET MVC3更新出错:ObjectStateManager中已存在具有同一键的对象
2015-12-24 07:45
519 查看
程序代码:
上边代码试图在更新person到数据库前取出旧数据(oldperson)进行文件删除等操作,结果页面报错:
引用内容
若是不取旧数据,该段代码执行可以正常执行,经过一番测试,猜测原因是读取旧数据时,对象会被添加到db中,当执行"db.Entry(person)"时,试图把person也添加到db中,但person和先前添加对象的键值是一样的,因而报错,这也解释了为什么不取旧数据不出错。
下边提供三种解决方法:
参考资料
[1].An object with the same key already exists in the ObjectStateManager. The ObjectStateManager cannot track multiple objects with the same key
[HttpPost] public ActionResult Edit(Person person) { if (ModelState.IsValid) { Person oldperson = db.People.Where(p => p.Id == person.Id).FirstOrDefault(); //TODO db.Entry(person).State = EntityState.Modified; db.SaveChanges(); return RedirectToAction("Index"); } return View(person); }
上边代码试图在更新person到数据库前取出旧数据(oldperson)进行文件删除等操作,结果页面报错:
引用内容
ObjectStateManager 中已存在具有同一键的对象。ObjectStateManager 无法跟踪具有相同键的多个对象。
若是不取旧数据,该段代码执行可以正常执行,经过一番测试,猜测原因是读取旧数据时,对象会被添加到db中,当执行"db.Entry(person)"时,试图把person也添加到db中,但person和先前添加对象的键值是一样的,因而报错,这也解释了为什么不取旧数据不出错。
下边提供三种解决方法:
Person oldperson = db.People.Where(p => p.Id == person.Id).FirstOrDefault(); //TODO oldperson.PicUrl = person.PicUrl; db.SaveChanges();
Person oldperson = db.People.AsNoTracking().Where(p => p.Id == person.Id).FirstOrDefault(); //TODO db.Entry(person).State = EntityState.Modified; db.SaveChanges();
Person oldperson = db.People.Where(p => p.Id == person.Id).FirstOrDefault(); //TODO db.Entry(oldperson).CurrentValues.SetValues(person); db.SaveChanges();
参考资料
[1].An object with the same key already exists in the ObjectStateManager. The ObjectStateManager cannot track multiple objects with the same key
相关文章推荐
- AsObject()转换成C#中的实体类
- OBjective-c NSThread 多线程1
- objective-c CLGeocoder 自带地图应用 路径导航
- MVVM双向绑定实现之Object.defineProperty
- eclipse工具及Object类、Scanner类
- Java Object类
- Objective-C Autorelease Pool 的实现原理
- 【Objective-C学习记录】第二十二天
- JS_funciton,object,Array
- iOS开发系列--Objective-C之KVC、KVO
- 数据类型和运算符(标识符和变量)
- Objective-C:@class和#import
- objective-c 中三种产生随机数的方法
- Objective--C UI Block 实现从后往前传值 学习笔记
- Objective-C Runtime 总结:类和对象 篇
- java 使用反射转换对象 Object to Map
- 理解 Objective-C Runtime
- objective-c 省市区练习(数组与字典的嵌套)
- Objective-C中的instancetype和id区别
- 【转】Objective-C Runtime 运行时:类与对象