Как вы упомянули, что вы можете изменить код метода GetServersAsync, я ожидаю, что DbContext-Call выглядит примерно так:
return ServerContext.Servers;
Вы можете изменить его на:
return ServerContext.Servers.Include(u=>u.User);
Таким образом, вы можете пропустить ошибку, вызывающую код снаружи, потому что пользователь уже заполнен.
Ошибка действительно возникает, поскольку вы устанавливаете свойство пользователя для отслеживаемого объекта.
Кроме того, перед сохранением вы можете установить нулевое значение User-Property.
Или вы можете установить User как EntityEntry как неизменный, прежде чем устанавливать User как User-Property (для проблем с производительностью я бы не рекомендовал это).
В качестве другого варианта вы можете интегрировать Lazy-Loading, который был представлен в EF Core 2.1, как описано здесь .
Обновление:
Вы можете загрузить свои серверы NotTracked, чтобы предотвратить проблему сохранения:
return ServerContext.Servers.AsNoTracking();
Тогда вы можете добавить пользователя, как вы уже сделали ...
Позже, перед сохранением серверов, вам необходимо выполнить следующие шаги:
Установите для пользователя значение null снова
Добавить серверный объект как обновленный в контекст
Вызов SaveChanges