web-dev-qa-db-ja.com

コードファーストマイグレーションを使用してデータベースを作成する方法

Entity Framwork 4.3とその移行を使用するASP.NET MVC 3プロジェクトがあります。次に、Entity Frameworkに、既にある移行を使用してデータベースを作成してもらいます。 Update-Databaseスクリプトを実行しようとすると、次のようになります。

Update-Database -Verbose -ProjectName AssemblyWithMigrations -StartUpProjectName WebProjectAssembly No migrations configuration type was found in the Assembly '/* my name of Assembly */'. (In Visual Studio you can use the Enable-Migrations command from Package Manager Console to add a migrations configuration).

しかし、実行しようとするとEnable-Migrations以下が表示されます。

Migrations have already been enabled in project 'AssemblyWithMigrations '. To overwrite the existing migrations configuration, use the -Force parameter.

したがって、問題は、EFが現在の移行バージョンを解決してデータベースを更新しようとしていることだと思います。しかし、データベースは存在せず、明らかに失敗します。

問題は、データベースが存在しない場合にデータベースを作成するためにEFマイグレーションを使用する方法ですか?または、Nugetコンソールを使用してそれを行う正しい方法は何ですか?

要約すると、私が欲しいもの:1.コマンドを実行します(おそらくupdate-database)これは、web.configファイルを使用してデータベースを作成します。2.すべての移行は、作成されたデータベースに作成順に適用されます。

ありがとう。 :)

22
sigurd

私はこれが古い質問であることに気づきましたが、一体何が...

移行で初期データベースを作成できるようにするには、次の方法がうまくいくことがわかりました。

  1. SQL Serverオブジェクトエクスプローラーからデータベースを削除する
  2. Migrationsフォルダー内から既存の移行をすべて削除します。
  3. Package-Management-Consoleで「Add-Migration InitialCreate」と入力します。

    [オプション、データベース初期化子に応じて]

  4. Package-Management-Consoleに「update-database」と入力します

これにより、「データベースなし」から現在のモデルに一致するデータベースを作成するための単一の移行スクリプトが得られます。

43
Dave R

マイグレーションを使用することは非常に便利ですが、データベースを操作するときは、次のステートメントを使用する方がよい場合があることに気づきました。

データベースの初期化戦略:自分に関連するコメント付きステートメントを使用します。

public DataContext(): base("DefaultConnection") 
{
  // Database.SetInitializer<DataContext>(new CreateDatabaseIfModelChanges<DataContext>());
  // Database.SetInitializer<DataContext>(new CreateDatabaseIfNotExists<DataContext>());                                                            
  // Database.SetInitializer<DataContext>(new DropCreateDatabaseAlways<DataContext>());
}                                                                                                                                                                                                                                                   
4
njabs