私の問題は、Entity Frameworkコアデータベースにデータをシードしようとしていることです。私はこれがApplicationDbContext
コンストラクタで呼び出されるべきではなく、startup
から呼び出されるべきであるが、これを行う方法がわからないことに気づいた。ASP.NET Core RC2シードデータベース
Startup.cs:
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
...
app.ApplicationServices.GetRequiredService<ApplicationDbContext>().Seed();
}
シード拡張子:
EDITは:
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" }
);
}
...
}
私は播種することを理解し、次のようにKetrexが提供するソリューションに基づいて、私の解決策は、データベースはEntity Frameworkの優先順位リストではかなり高いですが、この些細な作業を達成する方法や少なくとも一時的な作業を提供するためのドキュメントがあれば素晴らしいでしょう。円形。誰かがこれを行う方法に関するいくつかのガイダンスを提供することができれば、それは非常に高く評価されるだろう。私は私が解決策に近いと感じるが、ちょうど一緒にそれをまとめることはできません。
ありがとうございました。
ありがとうございました!この行 'app.ApplicationServices.GetRequiredService()'は私が見逃していた行です。あなたのソリューションを少し変更して拡張メソッドとして使用しました。 –
問題:context.Database.EnsureDeleted()delete __EFMigrationsHistoryも!!! –
@MohammadAkbariあなたはニットを拾っているようです。 //他のシード操作 行を実行していますか?それは明らかに彼が他の操作を行うことを意味する。ここで取り上げる問題は、シードメソッドにコンテキストを注入することでした。 – Ketrex