このようなデータが存在しない場合は常に、データを使用してDBを初期化します。この例では、テーブル「国」が空の場合はいつでも、データが挿入されます。以下は、「スタートアップ」クラスからのコードです: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();
}
}
指定された行は、「このコールが待たれていないため、コールが完了する前に、現在のメソッドの実行が継続」コンパイル警告となります。 OK、それは同期メソッドで、私は非同期メソッドを呼び出しています。この問題を解決する最善の方法は何ですか(どちらのオプションも問題ありません。実行を継続している間に非同期処理を開始するか、完了を待ってから続行してください)。
また、記載されているDBの初期化にStartup.Configureの代わりにApplicationDbContext.OnModelCreatingを使用する方が良いのだろうかと思います。あなたが使用する必要がありますしかし
これで警告が消去されます。私は、質問の第2部分(ApplicationDbContext.OnModelCreating対Startup.Configure)の質問を開いたままにしています。 – Marko