На объектный объект нельзя ссылаться несколькими экземплярами IEntityChangeTracker - PullRequest
0 голосов
/ 02 января 2012

У меня есть действие «Изменить контроллер» (Httpost) со следующим кодом:

 var person = membershipService.GetPersonByUserName(userName, out userAccount);

            if (!email.Equals(person.Email)) {
                person.Email = email;               
                CRRep.UpdatePersonEmail(person);
            }
 public void UpdatePersonEmail(Person person)
        {              
            try
            {                     
               context.Entry(person).State = System.Data.EntityState.Modified;
               context.SaveChanges();
            }
            catch (DbEntityValidationException dbEx)
            {
                foreach (var validationErrors in dbEx.EntityValidationErrors)
                {
                    foreach (var validationError in validationErrors.ValidationErrors)
                    {
                        Trace.TraceInformation("Property: {0} Error: {1}", validationError.PropertyName, validationError.ErrorMessage);
                    }
                }
            }
        }

Но я получаю следующую ошибку: На объектный объект нельзя ссылаться несколькими экземплярами IEntityChangeTracker.Пожалуйста, предложите мне решение.

1 Ответ

4 голосов
/ 03 января 2012

Вот что происходит:

В вашей реализации membersService вы запрашиваете контекст A, чтобы получить сущность person.

Затем в UpdatePersonEmail вы присоединяете человека к контексту B.

Есть несколько способов решить эту проблему. Самым простым, вероятно, является вызов .AsNoTracking (), когда вы запрашиваете контекст A в классе membersService. Таким образом, сущность Person, возвращаемая службой, не будет привязана к контексту A:

context.People.AsNoTracking().SingleOrDefault(p => p.UserName == userName);

Другим способом является внедрение контекста с использованием контейнера IoC, чтобы класс метода UpdatePersonEmail имел тот же экземпляр контекста, что и класс membersService.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...