2016-11-11 9 views
1

Microsoft Visual Studio 2015およびEntityFrameworkCoreを使用してプロジェクトをビルドしました。EntityFrameworkCore:初めてデータベースを初期化し、ユーザーがアプリケーションを初めて使用するときにシードする方法

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

私はGoogleで検索していると私はパッケージが必要CreateDatabaseIfNotExistsクラス使用してのVisual Studio 2013および以前のための解決策を見つける:System.Data.Entityhttp://www.entityframeworktutorial.net/code-first/database-initialization-strategy-in-code-first.aspx)が、しかし、このようなクラスとパッケージが存在しません。 EntityFrameworkCoreで

ユーザーがEntityFrameworkCoreで初めてアプリケーションを使用している場合、データベースを作成して少なくとも1つの行で読み込むにはどうすればよいですか?

またはこれはに相当します。Entity Framework CoreのSystem.Data.Entity

+0

接続文字列は正しいですか? –

+0

はい、ローカル開発用コンピュータで動作します。しかし、別のコンピュータでプロジェクトを開始しようとすると、getallメソッドでデータベースが見つからないためクラッシュします。 誰かが初めてアプリケーションを使用したり、別のコンピュータに移動したりするときに、データベースを作成する必要があります。 だから、私はCREATEDATABASEIFDOESNOTEXISTSクラスのような最初の時間の使用の場合には、DBを初期化する必要があります –

+0

ええ、私は接続文字列が*あなたの*コンピュータ上で、明らかにサーバー上ではないと判断します。サーバーはデータベースを作成する場所はどこですか?その情報は接続文字列内になければなりません。 –

答えて

0

ローワンミラーsaysその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

関連する問題