2016-04-19 24 views
0

私はEntity Framework 6でアプリケーションをビルドし、データベースから抽出データを挿入するためのいくつかのメソッドを作成したので、今は本番環境とデバッグ環境。Entity Framework 6を​​使用して生成された2つの同じデータベース

デバッグ用データベースは、テスト用にすべてのデータを消去する必要がありますが、制作時にデータを保持する必要があります。

私は2つのプロジェクトがあります。MyApp.DatabaseMyApp.Database.Testを、そして彼らには、それぞれapp.config -fileで、接続文字列、ようにプログラムをロードしてい:

public DatabaseContext() : base("name=MyDB") 
{ 
    System.Data.Entity.Database.SetInitializer<DatabaseContext>(new CreateDatabaseIfNotExists<DatabaseContext>()); 
} 

と、接続文字列、databaseパラメータをMyProdDBMyTestDBに設定:

<connectionStrings> 
    <add name="MyDB" connectionString="Host=localhost;user id=myUser;password=myPassword;database=MyProdDB" providerName="Npgsql" /> 
</connectionStrings> 

私は、アプリケーションを実行し、テストを実行すると、私はタイプごとに正しい接続文字列を取得しますデータベースの。 テストを実行するとエラーが発生します42P01: relation "dbo.Tags" does not exist簡単なメッセージです。データをテストデータベースに移行していないと言っています。

しかし、テストデータベースに移行するにはどうすればよいですか?

私はPackage manager Consoleでテストプロジェクトを選択しようとしたし、次のコマンドを実行している:

PM> Add-Migration "Init" 
No migrations configuration type was found in the assembly 'MyApp.Database.Test'. (In Visual Studio you can use the Enable-Migrations command from Package Manager Console to add a migrations configuration). 

PM> Update-Database 
Specify the '-Verbose' flag to view the SQL statements being applied to the target database. 
No migrations configuration type was found in the assembly 'MyApp.Database.Test'. (In Visual Studio you can use the Enable-Migrations command from Package Manager Console to add a migrations configuration). 

PM> Enable-Migrations 
No context type was found in the assembly 'MyApp.Database.Test'. 

は、私はほとんどMyApp.DatabaseのレプリカであるMyApp.Database.Testのための私自身のDbContextクラスを指定する必要がありますか?

+0

を見て - PRODとDEVを。 IACを使用している場合は、移行が行われる単一のプロジェクトでコンテキストを必要としている可能性があります。 PRODを更新するには、コンテキスト・プロジェクト内の接続文字列をPRODを指すように切り替えて、移行を実行するか、スクリプトを生成して他のデータベース「update-database -Script」を更新できます。 –

+0

同じ環境の統合テストが必要です。私はPRODでデータを失いたくはありません - DEVのみで。私のPRODは最新であり、必要なときに機能します。 '' Update-Database -Script''を実行しようとすると、私は明示的な移行が保留中ではないと言います。すべての移行を0から行うように頼むことはできますか? –

+0

私は: '' Update-Database -Script -SourceMigration:0''ということができます。それが私にかかっているところを見てみましょう... –

答えて

0

DEV環境でデータを必要としない場合は、データベースを削除してください。 CreateDatabaseIfNotExistsを使用すると、最新のスキーマで新しいデータベースが作成されます。 それ以上の場合、設定ファイルで初期化子を設定することができます。 PRODではCreateDatabaseIfNotExists inializer、DEVではDropCreateDatabaseIfModelChangesを使用します。したがって、モデルが変更された場合は、PRODでマイグレーションを使用する必要がありますが、DEVはデータベースをドロップして再度作成します。

例:

<contexts>  
    <context type="Elmah.SqlServer.EFInitializer.ElmahContext, Elmah.SqlServer.EFInitializer"> 
    <databaseInitializer type="Elmah.SqlServer.EFInitializer.ElmahDatabaseInitializer, Elmah.SqlServer.EFInitializer" /> 
    </context>  
</contexts> 

または私はあなたがユニットテストまたは2つの異なる環境を設定しようとしているかどうかについて混乱しているhere

+0

それは解決策の一部ですが、私は信じていますが、DEVはまだテーブルを含んでいません。何らかの '' Update-Database''を実行する必要はありません? –

+0

CreateDatabaseIfNotExistsイニシャライザデータベースを実行した後に、モデル –

+0

に記述されているスキーマのすべてのテーブルが含まれます。つまり、同じファイルで次のことを行います。https://gist.github.com/Limro/48017ebbd7e80f95e76396a7f7231f02 –

関連する問題