2011-12-17 14 views
34

Por defecto, el comando intenta complemento migración a crear el archivo de la migración .cs en¿Es posible cambiar la ubicación de la carpeta "Migraciones" de EF Migrations?

  • raíz del proyecto
    • migraciones

me gustaría guardar mis migraciones a lo largo con el resto de mi código relacionado con EF en la carpeta \ Data de mi proyecto:

  • raíz del proyecto
    • datos
      • migraciones

Con esta estructura, cuando yo haga

PM> add-migration Migration1 

en la consola NuGet recibo el siguiente error:

 
    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) 

¿Es posible especificar la ubicación en el disco que el archivo de migración debe crearse al ejecutar el comando add-migración?

+0

Marque la solución de Roger como la respuesta. Funcionó para mí Gracias. – jordanbtucker

Respuesta

55

En el constructor de la clase de configuración de agregar esta línea:

this.MigrationsDirectory = "DirOne\\DirTwo"; 

El espacio de nombres continuará siendo establecido como el espacio de nombres de la misma clase de configuración. Para cambiar este complemento esta línea (también en el constructor de configuración):

this.MigrationsNamespace = "MyApp.DirOne.DirTwo"; 
+2

+1 me salvó un montón de problemas. Revisé todos mis videos de Pluralsight tratando de encontrar un ejemplo que no herede esta configuración predeterminada para la ubicación de la carpeta de migraciones. Eres un salvavidas. – JustinMichaels

+0

¿Hay alguna forma de especificar esto en el archivo 'web.config'? –

+0

¿dónde está esta clase de configuración? –

10

Especificación de la carpeta de las migraciones es también posible durante la invocación del comando enable-migrations (que crea la clase Configuration), utilizando el parámetro -MigrationsDirectory:

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

el ejemplo creará una clase Configuration que establece el MigrationsDirectory a la carpeta especificada 'Migraciones \ CustomerDatabases' que es relativa a la carpeta raíz de proyectos.

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


Ver también this artículo que explica sobre un proyecto con múltiples contextos y carpetas de migración.

Por cierto, si está utilizando múltiples migraciones carpetas y múltiples contextos, por favor considere también para establecer un nombre para el esquema predeterminado en el método OnModelCreating de que DbContext clase derivada (donde la configuración Fluido-API es). Esto funcionará en EF6:

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

El prefijo que se tablas de bases de datos con el nombre de esquema. Esto le permitirá usar más de un contexto con una única base de datos en un escenario donde tiene varios grupos de tablas que son independientes de otra. (Esto también creará versiones separadas de las tablas MigrationHistory, en el ejemplo anterior sería CustomerDatabases.__MigrationHistory).

Cuestiones relacionadas