Mój problem polega na tym, że próbuję zasiać bazową bazę danych Entity Framework z danymi, aw myślach poniższy kod pokazuje pracę. Zdałem sobie sprawę, że to nie powinno być wywoływane w konstruktorze ApplicationDbContext
i powinno być wywoływane z startup
, ale nie jestem pewien, jak to zrobić.Baza jądrowa ASP.NET Core RC2
EDIT: W oparciu o rozwiązania dostarczone przez Ketrex, moje rozwiązanie jest następujące:
Startup.cs: rozbudowa
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" }
);
}
...
}
Rozumiem, że zaszczepienie baza danych znajduje się dość wysoko na liście priorytetów dla Entity Framework, ale byłoby wspaniale, gdyby istniała jakaś dokumentacja dotycząca tego, jak osiągnąć to banalne zadanie lub przynajmniej zapewnić tymczasową pracę okrągły. Jeśli ktoś może udzielić wskazówek, jak to zrobić, byłoby to bardzo cenne. Czuję, że jestem bliski rozwiązania, ale nie mogę tego złożyć.
Dzięki za pomoc.
Dziękuję bardzo! Był to wiersz 'app.ApplicationServices.GetRequiredService()' którego mi brakowało. Zmodyfikowałem nieco twoje rozwiązanie, aby użyć go jako metody rozszerzenia. –
problem: context.Database.EnsureDeleted() usuń __EFMigrationsHistory również !!! –
@MohammadAkbari wygląda na to, że wybierasz gnidy. Zauważ, że linia // wykonuje inne operacje związane z ziarnem nasion ? Wyraźnie oznacza, że może wykonywać inne operacje. Problemem, o którym tu mówiono, było wstrzyknięcie kontekstu do metody nasiennej. – Ketrex