Я хочу инициализировать БД данными, когда такие данные еще не существуют. В этом примере, когда таблица «Страна» пуста, данные будут вставлены. Ниже приведен код из класса «Автозагрузка»:asp net core database initialization (seeding the data)
public class Startup
{
// lines of code...
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
// lines of code...
app.ApplicationServices.GetRequiredService<ApplicationDbContext>().Seed();
}
}
public static class DbContextExtensions
{
public static void Seed(this ApplicationDbContext db)
{
AddCountries(db); // <= WARNING HERE
}
private static async Task AddCountries(ApplicationDbContext db)
{
if (await db.Country.CountAsync() == 0)
{
db.AddRange(
new Country { Name = "England", Code = "En" },
new Country { Name = "France", Code = "Fr" }
);
}
db.SaveChanges();
}
}
Назначенные результаты линии с предупреждением компиляции «Поскольку этот вызов не ожидал, выполнение текущего метода продолжается до завершения звонка». Хорошо, это синхронный метод, и я вызываю метод async. Каков наилучший способ решения этой проблемы (оба варианта в порядке: запуск асинхронной обработки вставки данных при продолжении выполнения или ожидание его завершения, а затем продолжение).
Кроме того, интересно, лучше ли использовать ApplicationDbContext.OnModelCreating вместо Startup.Configure для описанной инициализации DB.
ОК, это устраняет предупреждение. Я оставляю вопрос открытым для второй части вопроса (ApplicationDbContext.OnModelCreating vs Startup.Configure). – Marko