Entity framework 4 错误:一个实体对象不能被IEntityChangeTracker的多个实例引用
我一点也不懂背景知识我想。。。查看控制器的创建操作中的以下代码段:Entity framework 4 错误:一个实体对象不能被IEntityChangeTracker的多个实例引用,entity-framework-4,asp.net-mvc-4,Entity Framework 4,Asp.net Mvc 4,我一点也不懂背景知识我想。。。查看控制器的创建操作中的以下代码段: if (ModelState.IsValid) { Individual target = db.Individuals.Where(i => i.ID == Target.ID).First(); target.LocationId = Destination.ID; db.Entry(target).State = EntityState.Modified; db.SaveChange
if (ModelState.IsValid)
{
Individual target = db.Individuals.Where(i => i.ID == Target.ID).First();
target.LocationId = Destination.ID;
db.Entry(target).State = EntityState.Modified;
db.SaveChanges();
if (newPair != null)
{
db.Pairs.Add(newPair);
db.SaveChanges();
}
}
第一个SaveChanges()代码>工作正常,记录在数据库中更新。但是第二个SaveChanges()之前的.Add()
行代码>导致错误一个实体对象不能被多个IEntityChangeTracker实例引用。
newPair
是上面几行创建的Pair
类的新实例,db
是在控制器级别创建的my db上下文的实例,如中所示:
public class MoveController : Controller
{
private ShepherdContext db = new ShepherdContext();
......
这里发生了什么?我对MVC和实体框架不熟悉。我打了很多仗后也遇到了同样的问题
这个解决方案对我有效。希望对你们有用
var mediaItem = db.MediaItems.FirstOrDefault(x => x.Id == mediaItemViewModel.Id);
mediaItem.Name = mediaItemViewModel.Name;
mediaItem.Description = mediaItemViewModel.Description;
mediaItem.ModifiedDate = DateTime.Now;
mediaItem.FileName = mediaItem.FileName;
mediaItem.Size = KBToMBConversion(mediaItemViewModel.Size);
mediaItem.Type = mediaItem.Type;
//db.Entry(mediaItem).State = EntityState.Modified;// coment This line
db.SaveChanges();
因为您正在从db读取整个对象并将其保存在当前上下文中,当您尝试修改实体状态时,它会告诉您已经有一个实体附加到当前上下文中。只要调用save changes,它就会保存它。您的新配对是否引用了其他实体?是的!就这样!我当时是这样做的:newPair.Individual1=Target
而我本应该这样做的newPair.IndividualId=Target.Id
谢谢!