una migrar microsoft manage hacer datos crear como c# asp.net visual-studio azure azure-sql-database

c# - migrar - panel azure login



Cómo colocar todas las tablas y restablecer una base de datos SQL de Azure (6)

Tengo un proyecto ASP.NET MVC 5 que funciona localmente y cada vez que necesito deshacerme de la base de datos, acabo de abrir una nueva consulta sobre ella, cambiar el menú desplegable disponible de la base de datos al maestro, luego cierro la conexión en mi db local y ejecuto el consulta "drop database [name]". Luego construyo el proyecto, voy a la consola del administrador de paquetes y ejecuto "Actualizar-Base de datos". Esto parece reconstruir una nueva base de datos local y ejecuta el método de inicialización en mi archivo configuration.cs.

El problema es cuando tengo que probar cosas en un entorno en vivo para poder probar las API y cosas así, haré un despliegue en un sitio web de Azure y el Azure DB que lo acompaña, que es agradable y fácil de hacer. Yo marque el "Ejecutar código primeras migraciones" en el asistente de publicación y la mayoría de las veces funciona y puedo ejecutar y depurar mi versión en vivo. A veces necesito eliminar ese DB y volver a comenzar desde el principio, pero la única forma en que realmente lo he encontrado es ir al portal de Azure, eliminar la base de datos y luego volver a crearla con el mismo nombre. Esto lleva algún tiempo para que Azure lo procese, por lo que este es un ciclo de prueba lento.

¿Existe una manera rápida de simplemente colocar / restablecer un DB SQL de Azure a su estado nuevo, vacío y virgen y luego volver a publicar con "ejecutar primeras migraciones de código" para que vuelva a crear las tablas y volver a inicializar los datos?

He visto hablar de crear una migración inicial después de crear el archivo db, y luego tratar de utilizar Powershell para hacer una especie de roll-back a ese estado inicial, pero no he tenido suerte para hacerlo funcionar, y Quiero eliminar todos los datos al mismo tiempo. Tal vez acabo de obtener la sintaxis incorrecta o no he encontrado un tutorial lo suficientemente bueno. Si bien puedo ejecutar una consulta en Azure DB para "soltar la base de datos [x]", literalmente mata la instancia de SQL Azure DB como era de esperar y necesita volver al portal para volver a crearla. A veces, ese estado inicial no es bueno ya que el modelo se ha actualizado desde entonces, por lo que puede no ser útil de todos modos.

Siento que debería haber una forma más rápida y fácil de probar los cambios en un entorno en vivo, ya que existen todas estas herramientas y accesos directos excelentes proporcionados por MS, pero ¿acaso soltaron la pelota aquí para esta fase de desarrollo o me falta algo?


Alternativamente, puede soltar la base de datos en C # y crear una nueva base de datos con ExecuteNonQuery .

queryString = "DROP DATABASE TestDB2"; SqlCommand command = new SqlCommand(queryString, connection); command.Connection.Open(); command.ExecuteNonQuery();

Donde la conexión es una conexión a su base de datos principal de Azure SQL Database.

Alternativamente, para crear una base de datos:

queryString = "CREATE DATABASE TestDB2 ( EDITION = ''standard'' )";


Azure SQL es esencialmente un servidor SQL. Para que pueda usar MS SQL Server Management Studio https://docs.microsoft.com/en-us/sql/ssms/download-sql-server-management-studio-ssms

Abra la base de datos en Management Studio con su cuenta de administrador, luego ejecute los comandos SQL de la tabla desplegable o use el menú contextual de la GUI para hacer lo que quiera, al igual que con una base de datos local.

Algo similar se puede hacer en Visual Studio SQL Server Object Explorer. Simplemente haga clic derecho en la raíz "Agregar servidor SQL".


Dado que no hay una forma de API para hacer esto de la que soy consciente, hemos utilizado esta secuencia de comandos para aprovechar una consulta T-SQL para borrar la base de datos .

Para eliminar cada tabla (y mantener sus historiales de migración de EF si lo desea)

while(exists(select 1 from INFORMATION_SCHEMA.TABLES where TABLE_NAME != ''__MigrationHistory'' AND TABLE_TYPE = ''BASE TABLE'')) begin declare @sql nvarchar(2000) SELECT TOP 1 @sql=(''DROP TABLE '' + TABLE_SCHEMA + ''.['' + TABLE_NAME + '']'') FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME != ''__MigrationHistory'' AND TABLE_TYPE = ''BASE TABLE'' exec (@sql) /* you dont need this line, it just shows what was executed */ PRINT @sql end

Para eliminar las claves externas primero si necesita

while(exists(select 1 from INFORMATION_SCHEMA.TABLE_CONSTRAINTS where CONSTRAINT_TYPE=''FOREIGN KEY'')) begin declare @sql nvarchar(2000) SELECT TOP 1 @sql=(''ALTER TABLE '' + TABLE_SCHEMA + ''.['' + TABLE_NAME + ''] DROP CONSTRAINT ['' + CONSTRAINT_NAME + '']'') FROM information_schema.table_constraints WHERE CONSTRAINT_TYPE = ''FOREIGN KEY'' exec (@sql) PRINT @sql end

En mis pruebas, esto funcionó sin problemas (excepto que no tenía la cláusula where en DROP TABLE mientras consulta, ya que no uso las migraciones de Code First o EF).


Solo para agregar a las respuestas ya que la respuesta aceptada no funcionó para mí en Azure. Utilice la secuencia de comandos siguiente para Eliminar todas las tablas y, básicamente, restablecer la base de datos azul. Primero elimina todas las restricciones y luego descarta todas las tablas.

Como @Skorunka František comentó que esta secuencia de comandos asume que usas el esquema predeterminado [dbo]. Aunque podría reemplazarlo con su propio nombre de esquema.

/* Azure friendly */ /* Drop all Foreign Key constraints */ DECLARE @name VARCHAR(128) DECLARE @constraint VARCHAR(254) DECLARE @SQL VARCHAR(254) SELECT @name = (SELECT TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS WHERE constraint_catalog=DB_NAME() AND CONSTRAINT_TYPE = ''FOREIGN KEY'' ORDER BY TABLE_NAME) WHILE @name is not null BEGIN SELECT @constraint = (SELECT TOP 1 CONSTRAINT_NAME FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS WHERE constraint_catalog=DB_NAME() AND CONSTRAINT_TYPE = ''FOREIGN KEY'' AND TABLE_NAME = @name ORDER BY CONSTRAINT_NAME) WHILE @constraint IS NOT NULL BEGIN SELECT @SQL = ''ALTER TABLE [dbo].['' + RTRIM(@name) +''] DROP CONSTRAINT ['' + RTRIM(@constraint) +'']'' EXEC (@SQL) PRINT ''Dropped FK Constraint: '' + @constraint + '' on '' + @name SELECT @constraint = (SELECT TOP 1 CONSTRAINT_NAME FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS WHERE constraint_catalog=DB_NAME() AND CONSTRAINT_TYPE = ''FOREIGN KEY'' AND CONSTRAINT_NAME <> @constraint AND TABLE_NAME = @name ORDER BY CONSTRAINT_NAME) END SELECT @name = (SELECT TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS WHERE constraint_catalog=DB_NAME() AND CONSTRAINT_TYPE = ''FOREIGN KEY'' ORDER BY TABLE_NAME) END GO /* Drop all Primary Key constraints */ DECLARE @name VARCHAR(128) DECLARE @constraint VARCHAR(254) DECLARE @SQL VARCHAR(254) SELECT @name = (SELECT TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS WHERE constraint_catalog=DB_NAME() AND CONSTRAINT_TYPE = ''PRIMARY KEY'' ORDER BY TABLE_NAME) WHILE @name IS NOT NULL BEGIN SELECT @constraint = (SELECT TOP 1 CONSTRAINT_NAME FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS WHERE constraint_catalog=DB_NAME() AND CONSTRAINT_TYPE = ''PRIMARY KEY'' AND TABLE_NAME = @name ORDER BY CONSTRAINT_NAME) WHILE @constraint is not null BEGIN SELECT @SQL = ''ALTER TABLE [dbo].['' + RTRIM(@name) +''] DROP CONSTRAINT ['' + RTRIM(@constraint)+'']'' EXEC (@SQL) PRINT ''Dropped PK Constraint: '' + @constraint + '' on '' + @name SELECT @constraint = (SELECT TOP 1 CONSTRAINT_NAME FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS WHERE constraint_catalog=DB_NAME() AND CONSTRAINT_TYPE = ''PRIMARY KEY'' AND CONSTRAINT_NAME <> @constraint AND TABLE_NAME = @name ORDER BY CONSTRAINT_NAME) END SELECT @name = (SELECT TOP 1 TABLE_NAME FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS WHERE constraint_catalog=DB_NAME() AND CONSTRAINT_TYPE = ''PRIMARY KEY'' ORDER BY TABLE_NAME) END GO /* Drop all tables */ DECLARE @name VARCHAR(128) DECLARE @SQL VARCHAR(254) SELECT @name = (SELECT TOP 1 [name] FROM sysobjects WHERE [type] = ''U'' AND category = 0 ORDER BY [name]) WHILE @name IS NOT NULL BEGIN SELECT @SQL = ''DROP TABLE [dbo].['' + RTRIM(@name) +'']'' EXEC (@SQL) PRINT ''Dropped Table: '' + @name SELECT @name = (SELECT TOP 1 [name] FROM sysobjects WHERE [type] = ''U'' AND category = 0 AND [name] > @name ORDER BY [name]) END GO

Lamentablemente, no puedo encontrar la fuente para este código ya que lo tenía guardado en uno de mis repositorios. Espero que esto ayude a alguien.


Solo para agregar mi variante a la mezcla ... Esta también tiene en cuenta Vistas y Tablas Externas. No barf en tablas externas que deben eliminarse por separado con DROP EXTERNAL TABLE. Esto causó que la versión original girara para siempre.

while(exists(select 1 from INFORMATION_SCHEMA.TABLE_CONSTRAINTS where CONSTRAINT_TYPE=''FOREIGN KEY'')) begin declare @sql nvarchar(2000) SELECT TOP 1 @sql=(''ALTER TABLE '' + TABLE_SCHEMA + ''.['' + TABLE_NAME + ''] DROP CONSTRAINT ['' + CONSTRAINT_NAME + '']'') FROM information_schema.table_constraints WHERE CONSTRAINT_TYPE = ''FOREIGN KEY'' exec (@sql) PRINT @sql end while(exists(select 1 from INFORMATION_SCHEMA.TABLES where TABLE_NAME != ''database_firewall_rules'' AND TABLE_TYPE = ''BASE TABLE'' AND TABLE_NAME NOT IN (select name from sys.external_tables))) begin declare @sql1 nvarchar(2000) SELECT TOP 1 @sql1=(''DROP TABLE '' + TABLE_SCHEMA + ''.['' + TABLE_NAME + '']'') FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME != ''database_firewall_rules'' AND TABLE_TYPE = ''BASE TABLE'' AND TABLE_NAME NOT IN (select name from sys.external_tables) exec (@sql1) PRINT @sql1 end


Yo usualmente

  1. abrir SQL Server Management Studio o desde Visual Studio abrir SQL Server Object Explorer
  2. Me conecto a Azure SQL Server (es decir: yourserver.database.windows.net con su nombre de usuario y contraseña para la opción de autenticación de SQL Server seleccionada) (también recuerde que necesitaría agregar una excepción de firewall en Azure Portal para conectarse desde su PC a la base de datos de esta manera)
  3. Haga clic derecho en la base de datos y elimine.

Tan sencillo como eso.

Luego, como mencionó que tiene un primer acercamiento al código, simplemente ejecute las migraciones nuevamente en Azure SQL Server (por ejemplo, al publicar, asegúrese de marcar la opción de aplicar migraciones para la cadena de conexión del servidor sql dada)

Normalmente elimino la base de datos remota y luego vuelvo a desplegar la aplicación con el comando para volver a ejecutar las migraciones. Esto creará nuevamente la base de datos con las nuevas tablas. El código para inicializar la base de datos está en mi código de inicio, por lo que se inserta cada vez que se inicializa la aplicación si no hay valores en DB.

Esto también es válido para AspNet Core Mvc (MVC6)