Вот что происходит:
В вашей реализации membersService вы запрашиваете контекст A, чтобы получить сущность person.
Затем в UpdatePersonEmail вы присоединяете человека к контексту B.
Есть несколько способов решить эту проблему. Самым простым, вероятно, является вызов .AsNoTracking (), когда вы запрашиваете контекст A в классе membersService. Таким образом, сущность Person, возвращаемая службой, не будет привязана к контексту A:
context.People.AsNoTracking().SingleOrDefault(p => p.UserName == userName);
Другим способом является внедрение контекста с использованием контейнера IoC, чтобы класс метода UpdatePersonEmail имел тот же экземпляр контекста, что и класс membersService.