Связанные объекты никогда не загружаются автоматически. Вы должны либо загружать их с нетерпением, используя Include
, либо полагаться на отложенную загрузку (которая не включена по умолчанию и вообще не рекомендуется использовать). Проблема здесь заключается в том, что UserManager
не предоставляет средств для создания соединений через Include
. Вы можете go опередить и включить отложенную загрузку, но это фактически приведет к тому, что при обращении к свойству будет выдан новый запрос. Это может привести к проблеме запроса N + 1 при выполнении таких операций, как итерации, и может быстро выйти из-под контроля, чтобы полностью забить вашу базу данных. Вот почему ленивая загрузка не рекомендуется: слишком сложно гарантировать, что вы эффективно запрашиваете базу данных, и не очевидно, что вы этого не делаете.
Лучшее, что нужно сделать, если вы находитесь в ситуации где нужно для загрузки связанной сущности на пользователя, это просто использовать контекст напрямую, а не UserManager
:
var user = await _context.Users.Include(x => x.AspNetUserDetail).SingleOrDefaultAsync(x => x.Id == userId);
С учетом всего сказанного вы создаете проблема там, где ее нет. Весь смысл наличия расширяемого пользовательского объекта заключается в том, чтобы иметь возможность добавлять дополнительные данные непосредственно в этот объект . Вы не должны использовать класс «профиль», как это, во-первых. Введите имя, фамилию и т. Д. c. свойства непосредственно в сущности SiteUser
, и тогда вам нечего присоединять.