Ho un campo CreatedBy sulle mie entità in cui è memorizzato UserName dell'utente connesso. Vorrei creare anche una proprietà di navigazione sull'entità.
Le proprietà della mia entità assomigliano a questo:
public int Id { get; set; }
public string Name { get; set; }
// public ApplicationUser CreatedByUser { get; set; }
public string CreatedBy { get; set; }
Come posso rendere effettiva la proprietà di navigazione di CreatedByUser. Vorrei che venisse recuperato automaticamente quando uso "Includi" nelle mie query, quindi ho accesso a:
Product.CreatedByUser.FirstName e Product.CreatedByUser.LastName.
So che questo funzionerà facilmente se scelgo di memorizzare UserId piuttosto che UserName nel campo CreatedBy, ma la maggior parte delle persone memorizza lo UserName in un campo CreatedBy poiché è facilmente accessibile tramite HttpContext corrente. Mi piacerebbe anche tenerlo in questo modo per chiarezza nel database, piuttosto che avere un sacco di guidi.
Sì! È possibile eseguire questa operazione utilizzando la funzionalità Chiavi alternative core di Entity Framework nel modo seguente:
La tua entità:
public class YourEntity
{
public int Id { get; set; }
public string Name { get; set; }
public string CreatedBy { get; set; }
public ApplicationUser CreatedByUser { get; set; }
}
Quindi nella configurazione del modello:
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<YourEntity>()
.HasOne(e => e.CreatedByUser)
.WithMany()
.HasForeignKey(e => e.CreatedBy)
.HasPrincipalKey(cu => cu.UserName);
}