Lavorare con .NET Core 3.0 e EF Core se questo influisce sulle cose.
Sto provando a definire un modello in cui:
Sto provando a modellarlo come tale (BaseModel ha proprietà comuni a tutte le mie entità) e AVUser è la mia classe utente ASP.NET Identity.
public abstract class BaseModel
{
public int Id { get; set; }
public DateTime LastModifiedDate { get; set; }
public DateTime CreatedDate { get; set; }
public AVUser CreatedUser { get; set; }
public AVUser ModifiedUser { get; set; }
}
public class Toy: BaseModel
{
[MaxLength(80)]
public string Name { get; set; }
}
public class AVUser : IdentityUser
{
public string FirstName { get; set; }
// The currently selected toy for the user.
public int SelectedToyId { get; set; }
public Toy SelectedToy { get; set; }
}
Tuttavia, EF Core presenta un errore che indica: Impossibile determinare la relazione rappresentata dalla proprietà di navigazione "AVUser.Toy" di tipo "Giocattolo".
Ho problemi con il modo in cui annoto questo in modo che sappia che l'utente può avere una collezione di giocattoli, e voglio memorizzare un singolo giocattolo con l'utente come quello attualmente selezionato.
Scrivi le tue classi modello come segue:
public class Toy: BaseModel
{
[MaxLength(80)]
public string Name { get; set; }
[ForeignKey("AVUser")]
public string UserId { get; set; }
public AVUser AVUser { get; set; }
}
public class AVUser : IdentityUser
{
public string FirstName { get; set; }
// The currently selected toy for the user.
[ForeignKey("SelectedToy")]
public int SelectedToyId { get; set; }
public Toy SelectedToy { get; set; }
public ICollection<Toy> Toys {get; set;}
}
Quindi configurare OnModelCreating
in DbContext
come segue:
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<AVUser>().HasOne(a => a.SelectedToy).WithOne();
modelBuilder.Entity<AVUser>().HasMany(a => a.Toys).WithOne(t => t.AVUser).HasForeignKey(t => t.UserId);
}