2017-06-16 10 views
0

私たちはマイグレーションをリセットすることにしましたが、今度はリセットすることにしました。-EnableAutomaticMigrationsオプションを入れないと、Enable-Migrationsは動作しません。 私の接続文字列は、スタートアッププロジェクトとして設定されているWebプロジェクトにあります。自動コード移行を有効にしている場合にのみ、コード移行を有効にすることはできますか?

これは、我々が取った手順は以下のとおりです。

まず

は、我々は完全に移行フォルダとデータベースを削除しました。その後 我々が行うと:

enable-migrations 

は、我々が得る:コンテキストは、既存のデータベースをターゲットにしている場合

は確認しています...

現在のモデルに一致するようにデータベースを更新することができません

が保留されているので、 が変更され、自動移行が無効になります。保留中の モデル変更をコードベースの移行に書き込むか、自動移行を有効にします。 DbMigrationsConfiguration.AutomaticMigrationsEnabledをtrueに設定して に自動移行を有効にします。

私はこのエラーを理解していません。データベースはありません。移行されていないため、保留中の変更は参照されますか?その後、我々が行う場合

(私もgitの中chanvesを保留持っていけない)

enable-migrations -EnableAutomaticMigrations 

それは動作しますが、我々がそれに従うとき:

Add-Migration InitialCreation 

それは、空InitialCreationの移行を作成し私のモデルに対応するテーブルを使ってデータベースを作成します。しかし、これを行う最初にデータベースを作成するためのスクリプトを取得することはできません。私は何が起こっているのか分からない。 初めて自動移行を使用するようです。

なぜできないenable-migrations-EnableAutomaticMigrationsなし?

更新

スティーブ・グリーンと話した後、私は私のDbContextと初期化子

public class ApplicationDatabaseContext : DbContext 
    { 
     public ApplicationDatabaseContext() 
      : base("MyConnectionStringName") 
     { 
      Database.SetInitializer<ApplicationDatabaseContext>(new ApplicationDataInitializer()); 

      if (!Database.Exists()) 
      { 
       Database.Initialize(true); 
      } 
     } 

そして、私のDatabaseInitializerの一部を追加することが有用であると思う:

まず
public class ApplicationDataInitializer : CreateDatabaseIfNotExists<ApplicationDatabaseContext> 
    { 
     protected override void Seed(ApplicationDatabaseContext context) 
     { 
      base.Seed(context); 

      CreateData(context); 
     } 

     private void CreateData(ApplicationDatabaseContext context) 
     { 
      //Add data here 
      context.SaveChanges(); 
     } 
    } 

答えて

0

初期化子MigrateDatabaseToLatestVersionが設定されていることを確認してください。

第2に、自動移行を有効にする必要はありません。移行をリセットするには、フォルダ全体を削除する必要はありません(特に、Configuration()クラスでシードやその他のカスタマイズを行った場合)。あなたが本当にデータベースを作成するスクリプトを生成することを必要としないので、これはアップ()でコードなしでスナップショットを取ります

add-migration MyStartPoint -IgnoreChanges

:ただ、個々の移行を削除し、新しいベースラインの移行を追加。だから今update-database -Script -SourceMigration $InitialDatabaseは、新しいデータベースを作成するために使用できるスクリプトを作成する必要があります。

もう1つの方法は、CreateDatabaseIfNotExistのようにinitializerを使用することです。

+0

私たちはCreateDatabaseIfNotExist初期化子を持っています。私はEFと移行の新人で、フォルダ全体を削除したMicrosoftチュートリアルを見ると、それが私たちがやった理由です。また、マイグレーションをリセットするアドバイスもいくつありますか。 CreateDatabaseIfNotExist initliazerを使用しているときに、MigrateDatabaseToLatestVersionをどのように設定しますか? – Dzyann

+0

あなたは両方を必要としません。 MigrateDatabaseToLatestVersionは、ベースラインの最初の移行を行っている限り、存在しない場合はデータベースを作成します。コンテキストの静的コンストラクタに配置します。 –

+0

こんにちはSteve、DbContextコンストラクタとInitializerを投稿に追加しました。私たちはこれまでと同じことをしていましたが、EFの移行をリセットする問題はありませんでした。そして今、突然のことはもう働きません。 – Dzyann

関連する問題