Il mio problema è che sto provando a seminare un database Entity Framework Core con i dati e nella mia mente il codice seguente mostra il lavoro. Mi sono reso conto che questo non dovrebbe essere chiamato nel costruttore ApplicationDbContext
e dovrebbe essere chiamato dal startup
ma non sono sicuro di come farlo.Database dei semi di ASP2NET Core RC2
EDIT: Sulla base della soluzione fornita da Ketrex, la mia soluzione è la seguente:
Startup.cs: estensione
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
...
app.ApplicationServices.GetRequiredService<ApplicationDbContext>().Seed();
}
Seed:
public static class DbContextExtensions
{
public static void Seed(this ApplicationDbContext context)
{
// Perform database delete and create
context.Database.EnsureDeleted();
context.Database.EnsureCreated();
// Perform seed operations
AddCountries(context);
AddAreas(context);
AddGrades(context);
AddCrags(context);
AddClimbs(context);
// Save changes and release resources
context.SaveChanges();
context.Dispose();
}
private static void AddCountries(ApplicationDbContext context)
{
context.AddRange(
new Country { Name = "England", Code = "En" },
new Country { Name = "France", Code = "Fr" }
);
}
...
}
Capisco che semina un il database è abbastanza in alto nella lista delle priorità di Entity Framework ma sarebbe bello se ci fosse qualche documentazione su come raggiungere questo compito banale o almeno fornire un lavoro temporaneo a il giro. Se qualcuno può fornire alcune indicazioni su come farlo, sarebbe molto apprezzato. Mi sento vicino a una soluzione ma non riesco a metterlo insieme.
Grazie per qualsiasi aiuto.
Grazie mille! Era questa linea 'app.ApplicationServices.GetRequiredService()' che mi mancava. Ho modificato leggermente la tua soluzione per usarla come metodo di estensione. –
problema: contesto.Database.EnsureDeleted() elimina __EFMigrationsHistory anche !!! –
@MohammadAkbari sembri essere a raccogliere lendini. Notare // ... eseguire altre operazioni di seed linea? Indica chiaramente che potrebbe avere altre operazioni da eseguire. Il problema affrontato qui era l'iniezione del contesto nel metodo seme. – Ketrex