デフォルトでは、add-migrationコマンドは移行.csファイルを作成しようとします
移行と残りのEF関連コードをプロジェクトの\ Dataフォルダーに保存します。
この構造で、実行すると
PM> add-migration Migration1
nuGetコンソールで次のエラーを受け取ります。
System.IO.DirectoryNotFoundException:パス 'C:\ MyProjectRoot\Migrations\201112171635110_Migration1.cs'の一部が見つかりませんでした。 System.IO .__ Error.WinIOError(Int32 errorCode、String maybeFullPath) System.IO.FileStream.Init(String path、FileMode mode、FileAccess access、Int32 rights、Boolean useRights、FileShare share、Int32 bufferSize、FileOptions options、SECURITY_ATTRIBUTES secAttrs、String msgPath、Boolean bFromProxy、Boolean useLongPath) at System.IO.FileStream..ctor(String path、FileMode mode、FileAccess access、FileShare share、Int32 bufferSize、FileOptions options) at System.IO.StreamWriter.CreateFile(Stringパス、ブール型付加) at System.IO.StreamWriter..ctor(String path、Boolean append、Encoding encoding、Int32 bufferSize) at System.IO.StreamWriter..ctor(String path、ブール型付加、エンコーディングエンコーディング) at System.IO.File.InternalWriteAllText(String path、String contents、Encoding encodin g) at System.IO.File.WriteAllText(String path、String contents)
add-migrationコマンドの実行時に移行ファイルを作成するディスク上の場所を指定することは可能ですか?
構成クラスコンストラクターで、次の行を追加します。
this.MigrationsDirectory = "DirOne\\DirTwo";
名前空間は、構成クラス自体の名前空間として引き続き設定されます。これを変更するには、次の行を追加します(これも構成コンストラクターにあります)。
this.MigrationsNamespace = "MyApp.DirOne.DirTwo";
enable-migrations
パラメータを使用して、-MigrationsDirectory
コマンド(Configuration
クラスを作成する)の呼び出し中に、マイグレーションフォルダを指定することもできます。
enable-migrations -EnableAutomaticMigration:$false -MigrationsDirectory Migrations\CustomerDatabases -ContextTypeName FullyQualifiedContextName
この例では、Configuration
クラスを作成し、MigrationsDirectory
を、プロジェクトのルートフォルダーを基準に指定したフォルダー 'Migrations\CustomerDatabases'に設定します。
public Configuration()
{
AutomaticMigrationsEnabled = false;
MigrationsDirectory = @"Migrations\CustomerDatabases";
}
複数のコンテキストと移行フォルダを持つプロジェクトについて説明する this の記事も参照してください。
ちなみに、複数のマイグレーションフォルダーと複数のコンテキストを使用している場合は、OnModelCreating
派生クラスのDbContext
メソッドにデフォルトスキーマの名前を設定することも検討してください(Fluent -API構成です)。これはEF6で機能します。
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.HasDefaultSchema("CustomerDatabases");
}
は、データベーステーブルの前にスキーマ名を付けます。これにより、別のテーブルから独立しているテーブルのグループがいくつかあるシナリオで、単一のデータベースで複数のコンテキストを使用できるようになります。 (これにより、MigrationHistoryテーブルの個別のバージョンも作成されます。上記の例ではCustomerDatabases.__MigrationHistory
になります)。