Обычно это приводит к нескольким экземплярам IEntityChangeTracker (см .: Почему на мою сущность ссылаются несколько экземпляров IEntityChangeTracker? ), однако я подозреваю, что в вашем identityContext отключены прокси-серверы для отложенной загрузки, поэтому вы 'Вы получите исключение PK.
Проблема будет в том, что вы загружаете пользователя из одного контекста (identityContext) и пытаетесь сохранить ссылку на него через другой контекст.(контекст) Вы хотите загрузить ссылку из того же контекста.Контекст приложения знает о AppUser, но он не загружал экземпляр, который вы связываете с проектом, потому что он был загружен из другого контекста, поэтому он обрабатывает его как новый AppUser.
Решение состоит в том, чтобы загрузитьAppUser из context
вместо identityContext
public void AddProjectManager(int projectID, AppUser user)
{
Project proj = context.Projects.Include(p => p.ProjectManagers).FirstOrDefault(p => p.ProjectID == projectID);
if (!proj.ProjectManagers.Any(pm => pm.Id == user.Id))
{
AppUser appUser = context.AspNetUsers.Single(p => p.Id == user.Id);
proj.ProjectManagers.Add(appUser);
context.SaveChanges();
}
}
Если у вас нет DbSet для AspNetUser в контексте приложения, вам необходимо добавить его.Обычно для чего-то подобного я бы не добавил всю сущность AspNetUser в контекст приложения, а скорее облегченную сущность, содержащую только те детали, которые мне нужны (например, ID и имя), и тогда мои сущности приложения ссылались бы на этот облегченный экземпляр (указалв той же таблице) для ускорения операций с данными для этой ассоциации.