Estoy intentando que las migraciones de Entity Framework funcionen. He habilitado las primeras migraciones del código, se creó una carpeta de migraciones, un archivo de configuración y la tabla del historial de mig, pero no se creó inicialmente. ¿Me estoy perdiendo un paso? Este es un nuevo archivo db creado por EF (4.3.1).Sin creación inicial con migraciones de Entity Framework
Respuesta
Este comportamiento no está establecido de manera predeterminada, pero está disponible para usted de muchas formas diferentes.
Puede llamar
context.Database.CreateIfNotExists();
al iniciarse la aplicación.Puede usar uno de los
DatabaseInitializer
s incorporados. El inicializadorCreateDatabaseIfNotExists
está integrado en EntityFramework y solo necesita agregarse a su proyecto.Puede crear su propio inicializador de base de datos personalizado que incluya la opción # 1 en su interior. Ejemplo: Code First Migrations and initialization
Puede incluir DatabaseInitializers en su proyecto, ya sea por código o por medio de un archivo de configuración.
incluir un inicializador base de datos ADO.NET Entity Framework a través de código:
En el inicio de la aplicación se puede configurar el DatabaseInitializer así:
System.Data.Entity.Database.SetInitializer<DairyMmmContext>(new System.Data.Entity.CreateDatabaseIfNotExists<DairyMmmContext>());
Nota: Este código ha cambiado varias veces a lo largo de la vida de ADO.NET Entity Framework ! Este ejemplo es para EF 4.3, que es la versión de producción actual disponible a través de nuget.
incluir un inicializador base de datos ADO.NET Entity Framework a través de elementos de configuración:
<configuration>
<entityFramework>
<contexts>
<context type="MyNamespace.MyEFDataContext, AssemblyName">
<databaseInitializer
type="System.Data.Entity.CreateDatabaseIfNotExists`2[[MyNamespace.MyEFDataContext, AssemblyName],
[MyNamespace.Migrations.Configuration, AssemblyName]], EntityFramework" />
</context>
</contexts>
</entityFramework>
</configuration>
Se dará cuenta de que esto puede ser un poco "poco elegante" con esta configuración. Debe reemplazar AssemblyName
arriba con el nombre del ensamblaje donde guarda su estructura de entidad, reemplace MyNamespace.MyEFDataContext
con el nombre completo de su contexto de datos de estructura de entidad y reemplace MyNamespace.Migrations.Configuration
con el nombre completo en su clase de configuración (de forma predeterminada en Migración) carpeta dentro de su proyecto).
EDIT: Editado para responder a los comentarios adicionales
Una migración es un cambio de la definición de un esquema a otro esquema de definición. Crear la base de datos vacía no es una migración (pero todo después de eso). No habrá un archivo fuente de migración en su proyecto solo para crear un archivo db vacío, que el inicializador realiza en código.
Si ya está utilizando el inicializador DropCreateDatabaseAlways
debería hacerlo. Sin embargo, me di cuenta de que está configurando el inicializador en el código, lo que significa que hay una oportunidad para un problema de tiempo (configurar el inicializador después de que su contexto ya haya pasado el punto de llamar a cualquier inicializador).
Puede forzar que entityframework ejecute su inicializador en cualquier punto del código con context.Database.Initialize(true);
(El parámetro es verdadero/falso para forzar la inicialización independientemente del estado actual). Eso dejaría caer y recrear su base de datos todo el tiempo.
Pero también puede asegurarse de que su inicializador esté configurado tan pronto como sea posible en el ciclo de vida de su aplicación (antes de haber creado una instancia única de su contexto).
Gracias. Ya lo tengo así que se desencadena cuando se crea mi base de datos: Database.SetInitializer (nuevo DropCreateDatabaseAlways
Además, parece que la primera creación inicial es una migración automática, no estoy seguro si es por eso que no hay scrip de migración, cuando intento volver a la base de datos inicial, revierte todas las migraciones excepto la creación inicial que es una migración automática. .¿algunas ideas? solo habilito las migraciones después de que se crea el archivo db –
@ newbie_86 Me dirigí a sus comentarios revisando mi respuesta, ya que creo que otros con los mismos problemas pueden beneficiarse de esta información también. – BenSwayne
No estoy seguro de que sea el mismo pero tuve un problema similar. Creo que mi problema estaba relacionado con el hecho de que no utilizo una cadena de conexiones desde el archivo de configuración para obtener mi cadena de conexión.
Implementando el proyecto de inicio en la solución y también el combo de proyecto en la consola del Administrador de paquetes, pude generar esa primera migración.
También haga que tenga una cadena de conexiones con el nombre de su clase dbContext para que el Administrador de paquetes pueda encontrarla.
El artículo/tutorial aquí here (on microsoft.com) describe el motivo por el que no existe una migración de creación inicial. La migración solo se agregará si la base de datos ya existe. De lo contrario, la primera migración será 'initialCreate', ya que no tiene sentido crear una migración a una base de datos que aún no existe ... ninguna base de datos significa que no hay nada por lo que retroceder, en una migración hacia abajo.
Aquí es el párrafo pertinente:
Ejecutar el comando Enable-migraciones en la consola de Administrador de paquetes Este comando ha añadido una carpeta migraciones a nuestro proyecto, esta nueva carpeta contiene dos archivos:
La clase de configuración. Esta clase le permite configurar cómo se comportan las migraciones para su contexto. Para este tutorial solo utilizaremos la configuración predeterminada. Dado que solo hay un único contexto Code First en su proyecto, Enable-Migrations ha rellenado automáticamente el tipo de contexto al que se aplica esta configuración.
Una migración de InitialCreate. Esta migración se generó porque ya teníamos Code First para crear una base de datos para nosotros, antes de que habilitáramos las migraciones. El código en esta migración con scaffolded representa los objetos que ya se han creado en la base de datos. En nuestro caso, esa es la tabla Blog con las columnas BlogId y Name. El nombre de archivo incluye una marca de tiempo para ayudar con el pedido.
Si la base de datos no se ha creado aún, esta migración InitialCreate no se habría agregado al proyecto. En cambio, la primera vez que llamemos a Add-Migration el código para crear estas tablas se agregará a una nueva migración.
estoy usando EF 6 RC1 y me encontré con este problema en el que se creaban ni el InitialCreate ni __MigrationHistory cuando se ejecuta Enable-migraciones.
En realidad, justo después de actualizar de EF 5 a EF 6 ejecuté Enable-Migrations y por algún motivo creé una tabla __MigrationHistory usando el esquema EF 5, así que la eliminé y mi directorio Migrations e intenté comenzar de nuevo.
Pero cada vez que eliminé el directorio de Migraciones no crearía una InitialCreate o __MigrationHistory. Traté de descartar y volver a crear la base de datos y reiniciar Visual Studio 2012 en vano. Me di por vencido por el día y la mañana siguiente intenté de nuevo: luego de dejar que mi computadora se asentara durante unas 8 horas, se creó InitialCreate.Supongo que debe haber un caché en algún lugar que tenga un tiempo de espera realmente largo, ¿alguien? También estoy adivinando que el reinicio podría borrar el caché, pero no lo intenté.
En cualquier caso, es posible utilizar PM> Add-Migration InitialCreate
para realizar ese paso manualmente.
De todos modos, todavía no recibí una __MigrationHistory table. Aparentemente, EF 6 ha cambiado de crearlo durante el comando Enable-Migrations para, en cambio, crearlo solo durante el comando Update-Database. Y ya que mi esquema ya había sido creado en ese momento, tenía que tirarla abajo y volver a crear manualmente:
PM> Update-Database -TargetMigration:0
PM> Update-Database
También dejé después del primer comando para comprobar el estado de la base de datos para asegurarse de que estaba actualizando el correcto, desde according to this, la cadena de conexión de la base de datos se selecciona o autogenera dependiendo de la configuración, y a menos que esté configurada correctamente, no hay garantía de que vaya a acceder a la base de datos o instancia de SQL Server que desee.
Después de ejecutar ambos comandos creó una __MigrationHistory table - y no la creó como una tabla del sistema (que en realidad no quería de todos modos), así que todo está bien. No es exactamente el mismo problema que el OP, pero espero que esto sea útil para otra persona.
Referencias:
inicial "Crear" no se crea automáticamente! Necesita crearlo usted mismo. Algunos tutoriales de EF son confusos y tuve el mismo malentendido que tú.
Lo que hay que hacer:
-Add-Migration InitialModel
Si ya ha creado las tablas de base de datos y modelo de dominio, entonces:
-Add-Migration InitialModel -IgnoreChanges
A partir de este punto, su código será sincronizado con la base de datos . Cada vez que cambie el código, puede usar Agregar migración para agregar los cambios a su base de datos.
Esto resolvió el problema para mí. –
Definitivamente la solución más fácil para alguien con una base de datos existente. – JRadness
Sé que esto es viejo, pero no hay una respuesta aceptada y tuve el mismo problema.
El truco es el comando Habilitar migraciones. Como se indica here, hay un comando Enable-Migrations -EnableAutomaticMigrations. Lo que hace, inicia las migraciones exactamente donde estás.
Si desea que la primera migración sea la creación de una base de datos, simplemente ejecute Habilite-Migraciones (sin --EnableAutomaticMigrations).
Y recuerda que para establecer inicializador:
Database.SetInitializer(new MigrateDatabaseToLatestVersion<LicenseContext, Configuration>());
- 1. Obtención del script inicial de Migraciones de Framework de Entidad
- 2. Entity Framework 4.3 Migraciones mover datos existentes
- 3. Migraciones de bases de datos para Entity Framework 4
- 4. Migraciones de Entity Framework: Timeout SqlException durante la migración
- 5. Entity Framework - Comenzar de nuevo - Deshacer/Revertir todas las migraciones
- 6. Cómo implementar IDbContextFactory para su uso con las migraciones de datos de Entity Framework
- 7. Entity Framework sin base de datos
- 8. Migraciones de Entity Framework: compatibilidad con la cadena de conexión dinámica
- 9. SQLite con Entity Framework
- 10. Autonumérico con Entity Framework
- 11. Código Entity Framework Primeras migraciones de datos que no funcionan con VS2012 Web Deploy
- 12. Asp.net Web API sin Entity Framework
- 13. ASP.NET MVC con Entity Framework
- 14. Creación de la aplicación WebForms en MVC 3 + Entity Framework
- 15. ¿Cómo obtener Entity Framework 4.2 sin Nuget?
- 16. Valor predeterminado para los campos obligatorios en las migraciones de Entity Framework?
- 17. Entity Framework con múltiples edmx
- 18. Entity Framework - ¿Herencia con .Include?
- 19. Entity Framework con archivos XML
- 20. Entity-Framework 5.0 con PostgreSQL
- 21. Columnas cifradas con Entity Framework
- 22. Dónde comenzar con Entity Framework
- 23. Actualizar declaración con Entity Framework
- 24. Manejo de las migraciones de bases de datos cuando se utiliza Entity Framework
- 25. Transacción de Entity Framework con varios subprocesos
- 26. proyecciones de Entity Framework
- 27. de Entity Framework migraciones no incluyen la anotación de los datos ValorPredeterminado (EF5RC)
- 28. Establecer el parámetro del proyecto de inicio para las migraciones de Entity Framework
- 29. ¿Cómo desactivo Lazy Loading, Entity Framework 4.1 utilizando código de Migraciones de configuración
- 30. Pensamientos sobre Entity Framework
Después Habilitar migraciones, hay que añadir a la migración – Dabblernl
qué no añadir en el inicial crear la migración de forma automática? –
esto podría ayudar a http: // stackoverflow.com/questions/11679385/reset-entity-framework-migrations – detay