48

デフォルトでは、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、StringmaybeFullPath)で
   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)
   System.IO.FileStream..ctor(文字列パス、FileModeモード、FileAccessアクセス、FileShare共有、Int32 bufferSize、FileOptionsオプション)
   System.IO.StreamWriter.CreateFile(String path、Boolean append)で
   System.IO.StreamWriter..ctor(文字列パス、ブール値の追加、エンコーディングエンコーディング、Int32 bufferSize)
   System.IO.StreamWriter..ctor(文字列パス、ブール値の追加、エンコーディングエンコーディング)
   System.IO.File.InternalWriteAllText(文字列パス、文字列コンテンツ、エンコーディングエンコーディング)
   System.IO.File.WriteAllText(文字列パス、文字列コンテンツ)で

add-migrationコマンドを実行するときに、移行ファイルを作成する必要があるディスク上の場所を指定することはできますか?

4

2 に答える 2

68

構成クラスのコンストラクターに次の行を追加します。

this.MigrationsDirectory = "DirOne\\DirTwo";

名前空間は、構成クラス自体の名前空間として引き続き設定されます。これを変更するには、次の行を追加します(構成コンストラクターにも):

this.MigrationsNamespace = "MyApp.DirOne.DirTwo";
于 2012-05-31T02:25:43.607 に答える
21

次のパラメーターを使用して、enable-migrationsコマンド(Configurationクラスを作成する)の呼び出し中に移行フォルダーを指定することもできます。-MigrationsDirectory

enable-migrations -EnableAutomaticMigration:$false -MigrationsDirectory Migrations\CustomerDatabases -ContextTypeName FullyQualifiedContextName

この例では、プロジェクトのルートフォルダーに相対的な指定されたフォルダー'Migrations\CustomerDatabases'にConfigurationを設定するクラスを作成します。MigrationsDirectory

public Configuration()
{
    AutomaticMigrationsEnabled = false;
    MigrationsDirectory = @"Migrations\CustomerDatabases";
}


複数のコンテキストと移行フォルダーを持つプロジェクトについて説明しているこの記事も参照してください。

ちなみに、複数の移行フォルダーと複数のコンテキストを使用している場合は、派生クラスのOnModelCreatingメソッドDbContext(Fluent-API構成がある場合)でデフォルトスキーマの名前を設定することも検討してください。これはEF6で機能します。

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.HasDefaultSchema("CustomerDatabases");
    }

は、データベーステーブルの前にスキーマ名を付けます。これにより、別のテーブルから独立しているテーブルのグループが複数あるシナリオで、単一のデータベースで複数のコンテキストを使用できるようになります。(これにより、MigrationHistoryテーブルの個別のバージョンも作成されます。上記の例では次のようになりますCustomerDatabases.__MigrationHistory)。

于 2015-08-26T13:09:41.433 に答える