2

J'utilise actuellement le modèle référentiel dans un projet ASP.Net MVC et ont le code suivant:Erreur: « Un objet entité ne peut pas être référencé par plusieurs instances de IEntityChangeTracker »

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(); 

       } 

    } 

L'étudiant et WorkWeek Les classes sont dans une relation 1-à-plusieurs, respectivement.J'ai tout essayé depuis le détachement jusqu'à la création d'un contexte complètement nouveau comme dans l'exemple de code ci-dessus et je n'arrive pas à sauvegarder l'objet. le ObjectStateManager, que j'interprète comme il n'y a rien à détacher, qui, s'il est vrai, semble contredire l'erreur d'origine Je ne suis pas sûr de ce qui se passe, toute aide est appréciée

+0

Dupliquer: http://stackoverflow.com/questions/620084/how-to-get-rid-off-an-entity-object-cannot-be-referenced-by-multiple-instances-o et http://stackoverflow.com/questions/694625/ado-net-entity-framework-an-entity-object-cannot-be-referenced-by-multiple-instan –

Répondre

1

@Craig, merci j'avais déjà regardé ces liens et leurs solutions et essayé de les implémenter sans succès.

Le lien suivant m'a fourni la solution à mon problème, ainsi que d'autres informations très utiles sur d'autres problèmes liés à Entity Framework.

Entity Framework Gotchas

0

Je suis nouveau MVC & de cadre de travail Entité. J'ai eu le même problème après avoir beaucoup combattu Cette solution a fonctionné pour moi. J'espère que ça peut être utile pour vous les gars.

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(); 

Parce que vous lisez la db et la tenue de tout l'objet dans le contexte actuel et lorsque vous essayez de modifier l'entité vous indique l'expression de sa déjà une entité rattachée au contexte actuel. il suffit d'appeler enregistrer les modifications, il va l'enregistrer.