Come si trasformerebbero gli enum utilizzati in un contesto di database EF Core in tabelle di ricerca e aggiungere le chiavi esterne pertinenti?
Puoi usare un enum nel tuo codice e avere una tabella di ricerca nel tuo db usando una combinazione di queste due funzionalità EF Core:
Di seguito un esempio di modello di dati:
public class Wine
{
public int WineId { get; set; }
public string Name { get; set; }
public WineVariantId WineVariantId { get; set; }
public WineVariant WineVariant { get; set; }
}
public enum WineVariantId : int
{
Red = 0,
White = 1,
Rose = 2
}
public class WineVariant
{
public WineVariantId WineVariantId { get; set; }
public string Name { get; set; }
public List<Wine> Wines { get; set; }
}
Ecco il DbContext
cui si configurano conversioni di valore e seeding di dati:
public class WineContext : DbContext
{
public DbSet<Wine> Wines { get; set; }
public DbSet<WineVariant> WineVariants { get; set; }
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseSqlite("Data Source=wines.db");
}
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder
.Entity<Wine>()
.Property(e => e.WineVariantId)
.HasConversion<int>();
modelBuilder
.Entity<WineVariant>()
.Property(e => e.WineVariantId)
.HasConversion<int>();
modelBuilder
.Entity<WineVariant>().HasData(
Enum.GetValues(typeof(WineVariantId))
.Cast<WineVariantId>()
.Select(e => new WineVariant()
{
WineVariantId = e,
Name = e.ToString()
})
);
}
}
Quindi è possibile utilizzare i valori enum nel codice come segue:
db.Wines.Add(new Wine
{
Name = "Gutturnio",
WineVariantId = WineVariantId.Red,
});
db.Wines.Add(new Wine
{
Name = "Ortrugo",
WineVariantId = WineVariantId.White,
});
Ecco cosa conterrà il tuo db:
Ho pubblicato l'esempio completo come sintesi: https://gist.github.com/paolofulgoni/825bef5cd6cd92c4f9bbf33f603af4ff