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
谢谢!