Можно ли изменить расположение папки EF Migrations "Migrations"? - PullRequest
41 голосов
/ 17 декабря 2011

По умолчанию команда add -igration пытается создать файл .cs миграции в

  • Корень проекта
    • Миграции

Я хотел бы сохранить свои миграции вместе с остальным кодом, связанным с EF, в папке \ Data моего проекта:

  • Корень проекта
    • Данные
      • Миграции

С этой структурой, когда я выполняю

PM> add-migration Migration1

в консоли NuGet, я получаю следующееошибка:

    System.IO.DirectoryNotFoundException: Could not find a part of the path 'C:\MyProjectRoot\Migrations\201112171635110_Migration1.cs'.
   at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
   at 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 path, Boolean append)
   at System.IO.StreamWriter..ctor(String path, Boolean append, Encoding encoding, Int32 bufferSize)
   at System.IO.StreamWriter..ctor(String path, Boolean append, Encoding encoding)
   at System.IO.File.InternalWriteAllText(String path, String contents, Encoding encoding)
   at System.IO.File.WriteAllText(String path, String contents)

Можно ли указать место на диске, в котором должен быть создан файл миграции при выполнении команды add -igration?

Ответы [ 2 ]

62 голосов
/ 31 мая 2012

В конструкторе класса конфигурации добавьте эту строку:

this.MigrationsDirectory = "DirOne\\DirTwo";

Пространство имен будет по-прежнему устанавливаться как пространство имен самого класса конфигурации. Чтобы изменить это, добавьте эту строку (также в конструкторе конфигурации):

this.MigrationsNamespace = "MyApp.DirOne.DirTwo";
18 голосов
/ 26 августа 2015

Указание папки миграции также возможно во время вызова команды enable-migrations (которая создает класс Configuration) с использованием параметра -MigrationsDirectory:

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

В примере будет созданConfiguration класс, который устанавливает MigrationsDirectory в указанную папку 'Migrations \ CustomerDatabases', которая относится к корневой папке проектов.

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

См. Также эту статью , в которой рассказывается о проекте с несколькими контекстами и папками миграции.

Кстати, если вы используете несколько папок миграции и несколько контекстов, пожалуйста,Также рассмотрите возможность установки имени для схемы по умолчанию в методе OnModelCreating вашего производного класса DbContext (где конфигурация Fluent-API).Это будет работать в EF6:

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

Префикс таблиц базы данных перед именем схемы.Это позволит вам использовать более одного контекста с одной базой данных в сценарии, где у вас есть несколько групп таблиц, которые не зависят друг от друга.(Это также создаст отдельные версии таблиц MigrationHistory, в приведенном выше примере это будет CustomerDatabases.__MigrationHistory).

...