asp.net-mvc - net - entity framework code first tutorial español
¿Cómo volver a crear la base de datos para Entity Framework? (7)
Llegué a un mal estado con mi proyecto ASP.Net MVC 5, utilizando Code-First Entity Framework. No me importa perder datos, solo quiero comenzar de nuevo, recrear la base de datos y comenzar a usar las migraciones de Code-First.
Actualmente estoy en un estado en el que cada intento de actualización de la base de datos genera una excepción o un mensaje de error. Además, el sitio web no puede acceder a la base de datos correctamente. ¿Cómo puedo eliminar todas las migraciones, volver a crear la base de datos y comenzar de cero sin tener que crear un nuevo proyecto? En otras palabras, quiero mantener mi código pero abandonar la base de datos.
Más tarde, también querré que la base de datos de implementación (SQL Server en Azure) esté sincronizada. De nuevo, no me importa dejar caer todos los datos, solo quiero que funcione.
Proporcione los pasos necesarios para volver a un estado limpio. Muy apreciado.
Esto funcionó para mí:
- Eliminar la base de datos del Explorador de objetos de SQL Server en Visual Studio. Haga clic derecho y seleccione eliminar.
- Elimine los archivos mdf y ldf del sistema de archivos, si aún están allí.
- Reconstruir la solución.
- Aplicación de inicio: la base de datos se volverá a crear.
Me gustaría agregar que la respuesta de Lin es correcta.
Si elimina incorrectamente el MDF, tendrá que arreglarlo. Para arreglar las conexiones atornilladas en el proyecto al MDF. Respuesta corta; recrear y eliminarlo correctamente.
- Cree un MDF nuevo y asígnele el mismo nombre que el MDF antiguo, colóquelo en la misma ubicación de carpeta. Puede crear un nuevo proyecto y crear un nuevo mdf. El mdf no tiene que coincidir con sus tablas antiguas, porque iban a eliminarlo. Por lo tanto, cree o copie uno antiguo en la carpeta correcta.
- Ábralo en el explorador del servidor [haga doble clic en el mdf del explorador de soluciones]
- Eliminarlo en el explorador del servidor
- Eliminarlo del explorador de soluciones
- ejecutar
update-database -force
[Usar fuerza si es necesario]
Hecho, disfruta de tu nuevo db
ACTUALIZACIÓN 11/12/14 - Utilizo esto todo el tiempo cuando hago un cambio de db de última hora. Descubrí que esta es una gran manera de retrotraer tus migraciones al archivo original:
- Devuelve el db al original
Ejecute la migración normal para volver a ponerla al día
-
Update-Database -TargetMigration:0 -force
[Esto destruirá todas las tablas y todos los datos.] -
Update-Database -force
[use forzar si es necesario]
-
Si bien esta cuestión se basa en la premisa de no preocuparse por los datos, a veces el mantenimiento de los datos es esencial.
Si es así, escribí una lista de pasos sobre cómo recuperarse de la pesadilla de Entity Framework cuando la base de datos ya tiene tablas con el mismo nombre aquí: Cómo recuperarse de la pesadilla de Entity Framework: la base de datos ya tiene tablas con el mismo nombre
Aparentemente ... un moderador consideró apropiado eliminar mi publicación así que la pegaré aquí:
Cómo recuperarse de la pesadilla de Entity Framework: la base de datos ya tiene tablas con el mismo nombre
Descripción : si es como nosotros cuando su equipo es nuevo en EF, terminará en un estado donde no puede crear una nueva base de datos local o no puede aplicar actualizaciones a su base de datos de producción. Desea volver a un entorno limpio de EF y luego atenerse a lo básico, pero no puede. Si lo hace funcionar para la producción, no puede crear una base de datos local, y si lo hace funcionar para local, su servidor de producción no se sincronizará. Y, por último, no desea eliminar ningún dato del servidor de producción.
Síntoma : no se puede ejecutar la base de datos de actualización porque está tratando de ejecutar el script de creación y la base de datos ya tiene tablas con el mismo nombre.
Mensaje de error: System.Data.SqlClient.SqlException (0x80131904): Ya hay un objeto llamado '''' en la base de datos.
Antecedentes del problema : EF entiende dónde se encuentra la base de datos actual en comparación con dónde está el código en función de una tabla en la base de datos denominada dbo .__ MigrationHistory. Cuando mira los Scripts de migración, intenta volver a determinar dónde estaba el último en con los scripts. Si no puede, simplemente intenta aplicarlos en orden. Esto significa que vuelve al script de creación inicial y si observa la primera parte del comando UP, será la Tabla Creeate para la tabla en la que se produjo el error.
Para comprender esto con más detalle, recomiendo ver ambos videos aquí: https://msdn.microsoft.com/en-us/library/dn481501(v=vs.113).aspx
Solución : lo que tenemos que hacer es engañar a EF para que piense que la base de datos actual está actualizada sin aplicar estos comandos CreateTable. Al mismo tiempo, aún queremos que esos comandos existan para que podamos crear nuevas bases de datos locales.
Paso 1: DB de producción limpia Primero, haga una copia de seguridad de su producción db. En SSMS, haga clic con el botón derecho en la base de datos, seleccione "Tareas> Exportar aplicación de nivel de datos ..." y siga las instrucciones. Abra su base de datos de producción y elimine / suelte la tabla dbo .__ MigrationHistory.
Paso 2: Limpieza del entorno local Abra su carpeta de migraciones y elimínela. Supongo que puedes recuperar todo esto de Git si es necesario.
Paso 3: recrear inicial En el Administrador de paquetes, ejecute "Habilitar migraciones" (EF le pedirá que use -ContextTypeName si tiene contextos múltiples). Ejecute "Add-Migration Initial -verbose". Esto creará la secuencia de comandos inicial para crear la base de datos desde cero en función del código actual. Si tenía alguna operación de inicialización en Configuration.cs anterior, cópiela.
Paso 4: truco EF En este punto, si ejecutamos la base de datos de actualización , obtendríamos el error original. Entonces, tenemos que engañar a EF para que piense que está actualizado, sin ejecutar estos comandos. Por lo tanto, vaya al método Up en la migración inicial que acaba de crear y coméntelo todo.
Paso 5: Actualización de la base de datos Sin código para ejecutar en el proceso Up, EF creará la tabla dbo .__ MigrationHistory con la entrada correcta para decir que ejecutó este script correctamente. Ve y compruébalo si quieres. Ahora, elimine el comentario de ese código y guárdelo. Puede ejecutar Update-Database nuevamente si desea verificar que EF piense que está actualizado. No ejecutará el paso Arriba con todos los comandos de CreateTable porque cree que ya lo hizo.
Paso 6: Confirme que EF está ACTUALMENTE actualizado Si tenía un código que aún no tenía migraciones aplicadas, esto es lo que hice ...
Ejecute "Agregar Migración MissingMigrations" Esto creará prácticamente un script vacío. Como el código ya estaba allí, en realidad existían los comandos correctos para crear estas tablas en el script de migración inicial, así que corté los comandos CreateTable y equivalente en los métodos Arriba y Abajo.
Ahora, ejecute Update-Database nuevamente y mire cómo ejecuta su nueva secuencia de comandos de migración, creando las tablas apropiadas en la base de datos.
Paso 7: reconfirmar y confirmar. Construye, prueba, ejecuta. Asegúrese de que todo esté funcionando y luego comprometa los cambios.
Paso 8: deja que el resto de tu equipo sepa cómo proceder. Cuando la próxima persona se actualice, EF no sabrá qué le ocurrió dado que los scripts que tenía antes no existen. Pero, suponiendo que las bases de datos locales puedan volarse y volver a crearse, todo está bien. Tendrán que soltar su base de datos local y agregar crearla de EF nuevamente. Si tuvieran cambios locales y migraciones pendientes, les recomendaría que crearan su base de datos nuevamente en el maestro, cambien a su rama de características y recreen esos scripts de migración desde cero.
Siga los pasos a continuación:
1) Primero vaya a Server Explorer en Visual Studio, compruebe si las conexiones de datos ".mdf" para este proyecto están conectadas, de ser así, haga clic derecho y elimine.
2) Vaya a Solution Explorer, haga clic en el ícono show All Files.
3) Vaya a App_Data, haga clic derecho y elimine todos los archivos ".mdf" para este proyecto.
4) Elimine la carpeta Migrations haciendo clic derecho y eliminar.
5) Vaya a SQL Server Management Studio, asegúrese de que la base de datos para este proyecto no esté allí, de lo contrario elimínelo.
6) Vaya a la consola de Package Manager en Visual Studio y escriba:
-
Enable-Migrations -Force
-
Add-Migration init
-
Update-Database
7) Ejecuta tu aplicación
Nota: en el paso 6, parte 3, si aparece el error "No se puede adjuntar el archivo ...", posiblemente se deba a que no eliminó por completo los archivos de la base de datos en SQL Server.
Solo quiero agregar a la excelente respuesta de @Lin:
5) B. Si no tiene SQL Management Studio, vaya a "SQL Server Object Explorer". Si no puede ver su proyecto db en la ubicación "Explorador de objetos del servidor SQL", haga clic en el botón "Agregar servidor SQL" para agregarlo manualmente a la lista. Luego puede eliminar el db de la lista.
Una posible solución muy simple que funcionó para mí. Después de eliminar cualquier referencia de base de datos y conexiones que encuentre en server / serverobject explorer, haga clic derecho en la carpeta App_Data (no mostró ningún objeto dentro de la aplicación) y seleccione abrir. Una vez abierto, ponga toda la base de datos / etc. archivos en una carpeta de copia de seguridad o si tiene las agallas simplemente elimínelos. Ejecute su aplicación y debería recrear todo desde cero.
Mi solución es la más adecuada para :
- borró su archivo mdf
- quiero volver a crear tu db.
Para recrear su base de datos necesita agregar la conexión usando Visual Studio.
Paso 1 : vaya a Server Explorer agregue una nueva conexión (o busque un ícono de agregar db).
Paso 2 : cambiar el origen de datos al archivo de base de datos de Microsoft SQL Server .
Paso 3 : agregue cualquier nombre de base de datos que desee en el campo Nombre de archivo de la base de datos (preferiblemente el mismo nombre que tiene en el atributo web.config AttachDbFilename )
Paso 4 : haz clic en navegar y navega hasta donde desees ubicarlo.
Paso 5 : en la consola del gestor de paquetes, ejecute el comando update-database