Ho esteso ApplicationUser per includere un OrganizationId e un oggetto Organization che dovrebbe essere mappato a una tabella Organization esterna. Funziona bene con la registrazione dell'utente iniziale: se è un'organizzazione esistente, popolo semplicemente il campo OrganizationId. Se si tratta di una nuova organizzazione, istanzio un nuovo oggetto Organizzazione e una nuova organizzazione viene creata nella tabella Organizzazione.
Quando abbasso il record con GetUserAsync, vengono tirati i campi CityId e OrganizationId corretti. Gli oggetti UserCity e Organization sono NULL però. So di poter effettuare una ricerca manuale per eseguire una query per una città / organizzazione in base agli ID restituiti, ma mi chiedevo se Entity Framework avesse un meccanismo per popolare automaticamente questi due oggetti con le controparti con chiave esterna su 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; }
}
Durante il recupero dei record è necessario utilizzare la parola chiave include per ottenere i valori di riferimento. Ex
using (var context = new BloggingContext())
{
var blogs = context.Blogs
.Include(blog => blog.Posts)
.ToList();
}
Per il tuo codice sarà qualcosa di simile
context.Include("Organization").Include("City")
Inoltre, non viene caricato automaticamente nel core framework dell'entità perché il caricamento lazy non è ancora supportato fino alla versione 2.1.
Per ulteriori informazioni, consultare https://docs.microsoft.com/en-us/ef/core/querying/related-data