EntityFrameworkCore:データベースを初期化し、ユーザーが初めてアプリケーションを使用するときにそれをシードする方法

entity-framework-core

質問

Microsoft Visual Studio 2015とEntityFrameworkCoreを使用してプロジェクトを構築しました。

私は手作業でいくつかのダミーデータをシードして、私のソリューションを開発していました。今、私はサーバーにデプロイしたいですが、アプリケーションを初めて起動すると、データベースとデータが見つからないためクラッシュしてしまうという問題があります。

私はグーグルして、私は、Visual Studio 2013と以前のパッケージを必要とするCreateDatabaseIfNotExistsクラスを使用してソリューションを見つける: System.Data.Entityhttp://www.entityframeworktutorial.net/code-first/database-initialization-strategy-in -code-first.aspx )、ただし、そのようなクラスとパッケージはEntityFrameworkCoreに存在しません。

ユーザーがEntityFrameworkCoreで初めてアプリケーションを使用している場合、少なくとも1行のデータベースを作成してデータを取り込む方法はありますか?

Entity Framework CoreのSystem.Data.Entityと同等のものですか?

人気のある回答

Rowan MillerによるとApplyMigrationsはデータベース(存在しない場合)を作成し、すべての(固有)移行を適用するのに十分です。

このようなメソッドを作成する:

public void CreateDbAndSampleData(IServiceProvider applicationServices)
{
    using (var serviceScope = applicationServices.GetRequiredService<IServiceScopeFactory>().CreateScope())
    {
        using (var db = serviceProvider.GetService<ApplicationDbContext>()) 
        {
            // This will [try to] create database
            // and apply all necessary migrations
            db.Database.AsRelational().ApplyMigrations();

            // then you can check for existing data and modify something
            var admin = db.Users.Where(x => x.Name == "Superadmin").FirstOrDefault();
            if (admin == null)
            {
                db.Users.Add(new User {...});
                db.SaveChanges();
            }
        }
    }
}

Configureメソッドの最後に、 Startup.csから呼び出します。

CreateDbAndSampleData(app.ApplicationServices);

このコードはすべてのアプリの起動時に実行されるため、正確であり、重要ではないデータの変更(ユーザーのコメントの変更など)を上書きしないようにする必要があります。

MusicStoreアプリをサンプルとして使用することができます: Startup.csSampleData.cs



Related

ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ