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