6.1 Cambiar la base de datos a SQL Server

Cambiar de base de datos es relativamente fácil, primero cambiaremos la base de datos a un SQL Server local y luego un SQL Server en Azure

1) Agrega el siguiente paquete Nuget

Install-Package Microsoft.EntityFrameworkCore.SqlServer

2) Creamos la base de datos en sql server y nuestros usuarios administrador y de lectura

CaducaSQLBD.sql
//Creamos la base de datos
CREATE DATABASE caduca
GO
//Creamos un login para el usuario administrador
CREATE LOGIN AdminCaduca WITH PASSWORD = 'StKRV6MR6A'
GO
//Creamos un login para el usuario de lectura
CREATE LOGIN SistemaCaduca WITH PASSWORD = 'xADcUaP5cs'
GO
//Cambiamos a la base de datos
USE caduca
GO
//Creamos los usuarios administrador y de sistema
CREATE USER AdminCaduca FOR LOGIN AdminCaduca;
CREATE USER SistemaCaduca FOR LOGIN SistemaCaduca;
//Agregamos el permiso al usuario administrador de db_owner el cual 
//tiene acceso total a la base de datos
ALTER ROLE db_owner ADD MEMBER AdminCaduca;
//Agregamos los roles de escritura y lectura para el 
// usuario de sistema
ALTER ROLE db_datareader ADD MEMBER SistemaCaduca;
ALTER ROLE db_datawriter ADD MEMBER SistemaCaduca;

3) Agregamos una nueva cadena de conexión en nuestro archivo appsettings.json con el nombre SQLServerConnection

appsettings.json
{
  "ConnectionStrings": {
    "DefaultConnection": "server=localhost;port=3306;database=caduca;user=AdminCaduca;Password=StKRV6MR6A;sslMode=none",
    "SQLServerConnection": "Server=localhost;Database=caduca;User Id=AdminCaduca;Password=StKRV6MR6A;"
  },
  //...
}

4) Cambiamos nuestro archivo Startup.cs para que utilice Sql Server, dejamos comentada nuestra conexión MySQL por si deseamos regresar a MySQL y nuestra nueva cadena de conexión

Startup.cs
public void ConfigureServices(IServiceCollection services)
{
    //Código
    
    //Conexión MySQL
    //services.AddDbContext<CaducaContext>(options => 
           //options.UseMySql(Configuration.GetConnectionString
           //("DefaultConnection")));
   
    //Conexión SQL Server
    services.AddDbContext<CaducaContext>(options =>
         options.UseSqlServer(Configuration.GetConnectionString
              ("SQLServerConnection")));
}

5) Modificamos nuestra migración para que cree correctamente el campo autoincrement, ya que se agrego una notación especial para MySQL (.Annotation("MySql:ValueGenerationStrategy", MySqlValueGenerationStrategy.IdentityColumn)) agregamos el código para generar el identity en sql Server .Annotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn)

Migracion_TablaProducto.cs
migrationBuilder.CreateTable(
    name: "Producto",
    columns: table => new
    {
        Id = table.Column<int>(nullable: false)
        .Annotation("SqlServer:ValueGenerationStrategy", 
         SqlServerValueGenerationStrategy.IdentityColumn),
        // .Annotation("MySql:ValueGenerationStrategy"
        //, MySqlValueGenerationStrategy.IdentityColumn),
   }

También modificamos la migración de la TablaCategoría de la misma forma

6) Ejecutamos el comando Update-Database en la Consola del Administrador de Paquetes

Listo hemos cambiado la base de datos a SQL Server.

Last updated