Я расширил ApplicationUser, включив в него объект OrganizationId и объект Organization, который должен отображаться во внешнюю таблицу организации. Это отлично работает при первоначальной регистрации пользователя - если это уже существующая организация, я просто заполняю поле OrganizationId. Если это новая организация, я создаю экземпляр нового объекта «Организация», и в таблице «Организация» создается новая организация.
Когда я опускаю запись с помощью GetUserAsync, извлекаются правильные поля CityId и OrganizationId. Однако объекты UserCity и Organization имеют значение NULL. Я знаю, что могу выполнить поиск вручную для запроса города / организации на основе возвращаемых идентификаторов, но мне было интересно, есть ли у Entity Framework механизм для автоматического заполнения этих двух объектов аналогами с внешним ключом в GetUserAsync.
var user = await _userManager.GetUserAsync(User);
public class ApplicationUser : IdentityUser
{
public String FirstName { get; set; }
public String LastName { get; set; }
public int? CityId { get; set; }
[ForeignKey("CityId")]
public virtual City UserCity { get; set; }
[ForeignKey("OrganizationId")]
public virtual Organization Organization { get; set; }
public int? OrganizationId { get; set; }
public bool AddToConstantContact { get; set; }
}





При извлечении записей вам необходимо использовать ключевое слово include для получения ссылочных значений. Бывший
using (var context = new BloggingContext())
{
var blogs = context.Blogs
.Include(blog => blog.Posts)
.ToList();
}
Для вашего кода будет что-то вроде
context.Include("Organization").Include("City")
Он также не загружается автоматически в ядро entity framework, потому что ленивая загрузка еще не поддерживается до версии 2.1.
Для получения дополнительной информации проверьте https://docs.microsoft.com/en-us/ef/core/querying/related-data