Quindi ho un primo database di Entity Framework Core e un'applicazione .Net Core.
Voglio aggiungere Dati seme al momento della creazione del database. So che FluentAPI ha il metodo HasData ma non è quello che sto cercando.
Quando viene creato il database, voglio creare un utente con una password generata casualmente (che è diversa ogni volta) che verrà salvata su un file nel server.
Non riesco a utilizzare il metodo HasData perché in seguito creerà la stessa password ogni volta.
Quindi la mia domanda è: esiste un modo, diverso dal metodo HasData, per aggiungere i dati di seeding a un database di Entity Framework Core First Database
Sì! C'è un modo! Puoi fare come segue:
public static class DatabaseInitializer
{
public static void Initialize(YourDbContext dbContext)
{
dbContext.Database.EnsureCreated();
if (!dbContext.Users.Any())
{
// Write you necessary to code here to insert the User to database and save the the information to file.
}
}
}
Il nel metodo Configure
della classe Startup
come segue:
public void Configure(IApplicationBuilder app, IHostingEnvironment env, YourDbContext dbContext)
{
// other configurations
..............
DatabaseInitializer.Initialize(dbContext);
..............
// other configurations
}
Initialize
metodo di Initialize
verrà chiamato una sola volta all'avvio dell'applicazione.
Creare una classe DataSeeder e inserire DbContext in esso. Scrivi un metodo seedData per inserire i dati richiesti. Questa sarebbe logica personalizzata.
È possibile eseguire questo codice dopo aver creato il database.
public class DataSeeder
{
public static void SeedRandomPassword(YourDbContext context)
{
//// your custom logic to generate random password
//// set it to right user
context.Users.Add(); // Or Update depending on what you need
context.SaveChanges();
}
}
}