Asp.net mvc 错误:“;一个实体对象不能被IEntityChangeTracker的多个实例引用;
我目前正在ASP.Net MVC项目中使用存储库模式,代码如下:Asp.net mvc 错误:“;一个实体对象不能被IEntityChangeTracker的多个实例引用;,asp.net-mvc,entity-framework,linq-to-entities,ado.net-entity-data-model,Asp.net Mvc,Entity Framework,Linq To Entities,Ado.net Entity Data Model,我目前正在ASP.Net MVC项目中使用存储库模式,代码如下: partial class Timesheet : ITimesheet { TimeSystemDBEntities _db; public Timesheet() { _db = new TimeSystemDBEntities(); } .
partial class Timesheet : ITimesheet
{
TimeSystemDBEntities _db;
public Timesheet()
{
_db = new TimeSystemDBEntities();
}
.
.
//More Methods
.
.
//Save WorkWeek to database
private void SaveWorkWeek(WorkWeek wk)
{
//Creating a new test context in attempt to resolve
//Error: “An entity object cannot be referenced by multiple instances of IEntityChangeTracker"
var testContext = new TimeSystemDBEntities();
var newWorkWeek = new WorkWeek();
var newStudent = new Student();
//Copy contents of wk to newWorkWeek
newWorkWeek.Students = newStudent.GetStudent(wk.Students.id);
newWorkWeek.MonDate = wk.MonDate;
newWorkWeek.MonHours = wk.MonHours;
newWorkWeek.TuesDate = wk.TuesDate;
newWorkWeek.TuesHours = wk.TuesHours;
newWorkWeek.WedDate = wk.WedDate;
newWorkWeek.WedHours = wk.WedHours;
newWorkWeek.ThursDate = wk.ThursDate;
newWorkWeek.ThursHours = wk.ThursHours;
newWorkWeek.FriDate = wk.FriDate;
newWorkWeek.FriHours = wk.FriHours;
newWorkWeek.TempSave = wk.TempSave;
testContext.AddToWorkWeek(newWorkWeek); //Exception thrown here
testContext.SaveChanges();
//Also tried
//_db.AddToWorkWeek(newWorkWeek); //Exception thrown here
//_db.SaveChanges();
//Also tried
//_db.detach(wk): //Different exception thrown here: Says it's not in ObjectStateManager
//_db.AddToWorkWeek(newWorkWeek);
//_db.SaveChanges();
//Also tried
//_db.detach(wk.Students): //Different exception thrown here: Says it's not in ObjectStateManager
//_db.AddToWorkWeek(newWorkWeek);
//_db.SaveChanges();
}
}
学生班和工作周班分别处于一对多的关系中。我尝试了从分离到创建一个全新的上下文的所有方法,如上面的示例代码所示,但无法保存对象。当我尝试分离时,它基本上说它不在ObjectStateManager中,我将其解释为没有要分离的内容,如果是真的,则似乎与原始错误相矛盾。我不知道发生了什么,非常感谢您的帮助。@Craig,谢谢您,我实际上已经查看了这些链接及其解决方案,并试图实现它们,但没有成功 以下链接为我提供了问题的解决方案,还提供了与实体框架相关的其他杂项问题的其他非常有用的信息
我对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即可保存更改。Duplicate:和