1
我想用数据初始化数据库,只要这些数据不存在。在这个例子中,无论何时表“国家”为空,都会插入数据。以下是从“启动”类的代码:asp net核心数据库初始化(播种数据)
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();
}
}
指定行结果用汇编警告“因为这个呼叫没有等待,目前的方法的执行继续完成通话之前”。好吧,这是一个同步方法,我打电话给一个异步方法。解决这个问题的最好方法是什么(这两个选项都很好:在继续执行的同时启动异步处理od数据插入,或者等待其完成并继续)。
此外,我想知道是否最好使用ApplicationDbContext.OnModelCreating而不是Startup.Configure来描述数据库初始化。
好的,这消除了警告。我将问题的第二部分留给问题(ApplicationDbContext.OnModelCreating与Startup.Configure)。 – Marko