Compartir a través de


Conexión y consulta de Azure SQL Database mediante .NET y Entity Framework Core

Se aplica a:Azure SQL Database

En esta guía de inicio rápido se describe cómo conectar una aplicación a una base de datos de Azure SQL Database y realizar consultas usando .NET y Entity Framework Core. En este inicio rápido se sigue el enfoque recomendado sin contraseña para conectarse a la base de datos. Puede consultar más información sobre las conexiones sin contraseña en Conexiones sin contraseña para servicios de Azure.

Requisitos previos

Configuración del servidor de bases de datos

Las conexiones seguras sin contraseña a Azure SQL Database requieren una cierta configuración de la base de datos. Compruebe la siguiente configuración en el servidor lógico de Azure para conectarse correctamente a Azure SQL Database tanto en el entorno local como en un entorno hospedado:

  1. En el caso de las conexiones de desarrollo local, asegúrese de que el servidor lógico está configurado para permitir que la dirección IP de la máquina local y otros servicios de Azure se conecten:

    • Vaya a la página Redes del servidor.

    • Active o desactive el botón de radio Redes seleccionadas para mostrar opciones de configuración adicionales.

    • Seleccione Agregar la dirección IPv4 de cliente (xx.xx.xx.xx) para agregar una regla de firewall que habilitará las conexiones desde la dirección IPv4 del equipo local. Como alternativa, también puede seleccionar + Agregar una regla de firewall para especificar una dirección IP específica de su elección.

    • Asegúrese de que la casilla Permitir que los servicios y recursos de Azure accedan a este servidor esté seleccionada.

      Captura de pantalla que muestra cómo configurar reglas de firewall.

      Advertencia

      La habilitación de la opción Permitir que los servicios y recursos de Azure accedan a este servidor no es un procedimiento de seguridad recomendado para escenarios de producción. Las aplicaciones reales deben implementar enfoques más seguros, como restricciones de firewall más fuertes o configuraciones de red virtual.

      Puede consultar más información sobre las configuraciones de seguridad de la base de datos en los siguientes recursos:

  2. El servidor también debe tener habilitada la autenticación de Microsoft Entra y tener asignada una cuenta de administrador de Microsoft Entra. Para las conexiones de desarrollo local, la cuenta de administrador de Microsoft Entra debe ser una cuenta que también puede iniciar sesión en Visual Studio o en la CLI de Azure localmente. Puede comprobar si el servidor tiene habilitada la autenticación de Microsoft Entra en la página de Microsoft Entra ID del servidor lógico.

    Captura de pantalla que muestra cómo habilitar la autenticación de Microsoft Entra.

  3. Si usa una cuenta personal de Azure, asegúrese de que ha instalado y configurado Microsoft Entra para Azure SQL Database con el fin de asignar su cuenta como administrador del servidor. Si usa una cuenta corporativa, es probable que Microsoft Entra ID ya esté configurado.

Creación del proyecto

En los pasos de esta sección se crea una API web mínima de .NET mediante la CLI de .NET o Visual Studio 2022.

  1. En la barra de menús de Visual Studio, vaya a Archivo>nuevo>Proyecto....

  2. En la ventana de diálogo, escriba ASP.NET en el cuadro de búsqueda de la plantilla de proyecto y seleccione el resultado de la API web de ASP.NET Core. Elija Siguiente en la parte inferior del cuadro de diálogo.

  3. En Nombre del proyecto, escriba DotNetSQL. Deje los valores predeterminados para el resto de los campos y seleccione Siguiente.

  4. En Framework, seleccione .NET 9.0 y desactive Usar controladores. En esta guía de inicio rápido se usa una plantilla de API mínima para simplificar la creación y configuración de puntos de conexión.

  5. Seleccione Create. El nuevo proyecto se abre en el entorno de Visual Studio.

Incorporación de Entity Framework Core al proyecto

Para conectarse a Azure SQL Database mediante .NET y Entity Framework Core, debe agregar tres paquetes NuGet al proyecto siguiendo uno de los siguientes métodos:

  1. En la ventana Explorador de soluciones, haga clic con el botón derecho en el nodo Dependencias y seleccione Administrar paquetes NuGet.

  2. En la ventana resultante, busque EntityFrameworkCore. Busque e instale los siguientes paquetes:

  • Microsoft.EntityFrameworkCore: proporciona la funcionalidad esencial de Entity Framework Core.
  • Microsoft.EntityFrameworkCore.SqlServer: proporciona componentes adicionales para conectarse al servidor lógico.
  • Microsoft.EntityFrameworkCore.Design: proporciona compatibilidad con la ejecución de migraciones de Entity Framework.
  • Microsoft.EntityFrameworkCore.Tools: proporciona compatibilidad con herramientas de consola del Administrador de paquetes de Visual Studio (solo PowerShell)
  • Swashbuckle.AspNetCore: opcional: proporciona compatibilidad con la interacción de SwaggerUI con los puntos de conexión de la aplicación.

Adición del código para conectarse a Azure SQL Database

Las bibliotecas de Entity Framework Core se basan en las bibliotecas Microsoft.Data.SqlClient y Azure.Identity para implementar conexiones sin contraseña a Azure SQL Database. La biblioteca Azure.Identity proporciona una clase denominada DefaultAzureCredential que controla la autenticación sin contraseña en Azure.

DefaultAzureCredential admite varios métodos de autenticación y determina qué método se usa en tiempo de ejecución. Este enfoque permite que la aplicación use diferentes métodos de autenticación en distintos entornos (local frente a producción) sin implementar código específico del entorno. La introducción a la biblioteca de identidades de Azure explica el orden y las ubicaciones en las que DefaultAzureCredential busca las credenciales.

Complete los pasos siguientes para conectarse a Azure SQL Database por medio de Entity Framework Core y la clase DefaultAzureCredential subyacente:

  1. Agregue una sección ConnectionStrings al archivo appsettings.Development.json para que coincida con el siguiente código. Reemplace <server>.database.windows.net por el nombre del servidor de bases de datos sin contraseña al que desea conectarse y <database> por el nombre de la base de datos.

    {
        "Logging": {
            "LogLevel": {
                "Default": "Information",
                "Microsoft.AspNetCore": "Warning"
            }
        },
        "ConnectionStrings": {
            "AZURE_SQL_CONNECTIONSTRING": "Data Source=<server>.database.windows.net;Initial Catalog=<database>;Authentication=Active Directory Default;Encrypt=True;"
        }
    }
    

    Nota:

    Recuerde actualizar los <your database-server-name> marcadores de posición y <your-database-name> en la cadena de conexión de la base de datos. Las cadenas de conexión sin contraseña son seguras para confirmar el control de código fuente, ya que no contienen secretos como nombres de usuario, contraseñas o claves de acceso.

    La cadena de conexión sin contraseña incluye un valor de configuración de Authentication=Active Directory Default, que permite a Entity Framework Core usar DefaultAzureCredential para conectarse a los servicios de Azure. Cuando la aplicación se ejecuta localmente, se autentica con el usuario con el que ha iniciado sesión en Visual Studio. Una vez que la aplicación se implementa en Azure, el mismo código detecta y aplica la identidad administrada asociada a la aplicación hospedada, que se configura más adelante.

  2. Reemplace el contenido del archivo Program.cs por el código siguiente:

    using Microsoft.AspNetCore.Mvc;
    using Microsoft.EntityFrameworkCore;
    
    var builder = WebApplication.CreateBuilder();
    
    builder.Services.AddOpenApi();
    
    var connection = String.Empty;
    if (builder.Environment.IsDevelopment())
    {
        builder.Configuration.AddEnvironmentVariables().AddJsonFile("appsettings.Development.json");
        connection = builder.Configuration.GetConnectionString("AZURE_SQL_CONNECTIONSTRING");
    }
    else
    {
        connection = Environment.GetEnvironmentVariable("AZURE_SQL_CONNECTIONSTRING");
    }
    
    builder.Services.AddDbContext<PersonDbContext>(options =>
        options.UseSqlServer(connection));
    
    var app = builder.Build();
    
    if (app.Environment.IsDevelopment())
    {
        app.MapOpenApi();
        app.UseSwaggerUI(options =>
        {
            options.SwaggerEndpoint("/openapi/v1.json", "v1");
        });
    }
    
    app.MapGet("/", () => "Hello world!");
    
    app.MapGet("/Person", (PersonDbContext context) =>
    {
        return context.Person.ToList();
    });
    
    app.MapPost("/Person", (Person person, PersonDbContext context) =>
    {
        context.Add(person);
        context.SaveChanges();
    });
    
    app.Run();
    
    public class Person
    {
        public int Id { get; set; }
        public string FirstName { get; set; }
        public string LastName { get; set; }
    }
    
    public class PersonDbContext : DbContext
    {
        public PersonDbContext(DbContextOptions<PersonDbContext> options)
            : base(options)
        {
        }
    
        public DbSet<Person> Person { get; set; }
    }
    

    El código anterior controla los pasos siguientes:

    • Recupera la cadena de conexión a la base de datos sin contraseña del archivo appsettings.Development.json para el desarrollo local, o bien de las variables de entorno para escenarios de producción hospedados.
    • Registra la clase DbContext de Entity Framework Core en el contenedor de inserción de dependencias de .NET. Puede obtener más información sobre DbContext en el artículo Introducción a EF Core, en la documentación de Entity Framework Core.
    • Configura la compatibilidad con OpenAPI de .NET 9.0 con SwaggerUI para proporcionar una interfaz de usuario que puede usar para interactuar con los puntos de conexión y la base de datos de la aplicación.
    • Agrega puntos de conexión para recuperar y agregar entidades en la base de datos.
    • Define una Person clase para representar un único registro en la Persons tabla de base de datos y la PersonDbContext clase que se registró con el contenedor de inserción de dependencias de .NET.

Ejecución de las migraciones para crear la base de datos

Para actualizar el esquema de la base de datos con el fin de que coincida con el modelo de datos mediante Entity Framework Core, debe usar una migración. Las migraciones pueden crear y actualizar incrementalmente el esquema de una base de datos para mantenerlo sincronizado con el modelo de datos de una aplicación. Puede consultar más información sobre este patrón en Descripción general de las migraciones.

  1. Abra una ventana de terminal en la raíz del proyecto.

  2. Ejecute el siguiente comando para generar una migración inicial que pueda crear la base de datos:

    Add-Migration InitialCreate
    

  1. Debe aparecer la carpeta Migrations en el directorio del proyecto, junto con un archivo denominado InitialCreate con números únicos antepuestos. Ejecute la migración para crear la base de datos mediante el comando siguiente y las herramientas entity Framework Core crean el esquema de base de datos en Azure definido por la PersonDbContext clase .

    Update-Database
    

Prueba de la aplicación de forma local

La aplicación está lista para probarse localmente. Asegúrese de que ha iniciado sesión en Visual Studio o en la CLI de Azure con la misma cuenta que ha establecido como administrador de la base de datos.

  1. Presione el botón Ejecutar en la parte superior de la ventana de Visual Studio para iniciar el proyecto de API.

  2. En la página de la interfaz de usuario de Swagger, expanda el método POST y seleccione Probar.

  3. Modifique el código JSON de ejemplo para incluir valores para el nombre y el nombre de familia. Seleccione Ejecutar para agregar un nuevo registro a la base de datos. La API devuelve una respuesta correcta.

    Captura de pantalla que muestra cómo probar la API.

  4. Expanda el GET método en la página de la interfaz de usuario de Swagger y seleccione Pruébelo. Seleccione Ejecutar y se devolverá la persona que acaba de crear.

Implementación en Azure App Service

La aplicación está lista para implementarse en Azure. Visual Studio puede crear una instancia de Azure App Service e implementar la aplicación en un único flujo de trabajo.

  1. Asegúrese de que la aplicación se detiene y se compila correctamente.

  2. En la ventana Explorador de soluciones de Visual Studio, haga clic con el botón derecho en el nodo de proyecto del nivel superior y seleccione Publicar.

  3. En el cuadro de diálogo de publicación, seleccione Azure como destino de implementación y, después, seleccione Siguiente.

  4. Para el destino específico, elija Azure App Service (Windows) y seleccione Siguiente.

  5. Seleccione el icono + verde para crear una nueva instancia de App Service para implementarla y escriba los siguientes valores:

    • Nombre: deje el valor predeterminado.
    • Nombre de la suscripción: seleccione la suscripción en la que se va a realizar la implementación.
    • Grupo de recursos: seleccione Nuevo y cree un grupo de recursos denominado msdocs-dotnet-sql.
    • Plan de hospedaje: seleccione Nuevo para abrir el cuadro de diálogo Plan de hospedaje. Deje los valores predeterminados como están y seleccione Aceptar.
    • Seleccione Crear para cerrar el cuadro de diálogo original. Visual Studio crea un recurso de App Service en Azure.

    Captura de pantalla que muestra cómo realizar una implementación con Visual Studio.

  6. Una vez creado el recurso, asegúrese de seleccionar en la lista de servicios de aplicaciones y, a continuación, seleccione Siguiente.

  7. En el paso API Management, seleccione la casilla Omitir este paso en la parte inferior y elija Finalizar.

  8. Seleccione Publicar en la esquina superior derecha del resumen del perfil de publicación para implementar la aplicación en Azure.

Cuando finalice la implementación, Visual Studio inicia el explorador para mostrar la aplicación hospedada. Debería ver el Hello world mensaje del punto de conexión predeterminado. Sin embargo, en este momento los puntos de conexión de base de datos no funcionan correctamente en Azure. Todavía debe configurar la conexión segura entre la instancia de App Service y la base de datos SQL para recuperar los datos.

Conexión de App Service a Azure SQL Database

Los pasos siguientes son necesarios para conectar la instancia de App Service a Azure SQL Database:

  1. Cree una identidad administrada para App Service. La Microsoft.Data.SqlClient biblioteca incluida en la aplicación detecta automáticamente la identidad administrada, al igual que detectó el usuario local de Visual Studio.
  2. Cree un usuario de SQL Database y asócielo a la identidad administrada de App Service.
  3. Asigne roles de SQL al usuario de la base de datos que le concedan permisos de lectura, escritura y quizá otros permisos.

Hay varias herramientas disponibles para implementar estos pasos:

El conector de servicio es una herramienta que simplifica las conexiones autenticadas entre distintos servicios de Azure. Service Connector admite actualmente la conexión de una instancia de App Service a una base de datos SQL mediante la extensión sin contraseña de la CLI de Azure.

  1. Instale o actualice la extensión sin contraseña de Service Connector:

    az extension add --name serviceconnector-passwordless --upgrade
    
  2. Ejecute el comando para conectar la az webapp connection create sql aplicación web a la base de datos mediante una identidad administrada asignada por el sistema. Reemplace los marcadores de posición por los valores adecuados:

    az webapp connection create sql
    -g <your-resource-group>
    -n <your-app-service-name>
    --tg <your-database-server-resource-group>
    --server <your-database-server-name>
    --database <your-database-name>
    --system-identity
    

Puede comprobar los cambios realizados por el conector de servicio en la configuración de App Service.

  1. Vaya a la página Identidad de la instancia de App Service. En la pestaña Asignado por el sistema, el Estado debe establecerse en Activado. Este valor significa que se habilitó una identidad administrada asignada por el sistema para la aplicación.

  2. Vaya a la página Configuración de la instancia de App Service. En la pestaña Cadenas de conexión, debería ver una cadena de conexión denominada AZURE_SQL_CONNECTIONSTRING. Seleccione el texto Haga clic aquí para mostrar el valor para ver la cadena de conexión sin contraseña que se ha generado. El nombre de esta cadena de conexión se alinea con el que configuró en la aplicación, por lo que se detecta automáticamente al ejecutarse en Azure.

Importante

Aunque esta solución proporciona un enfoque sencillo para empezar, no es un procedimiento recomendado para entornos de producción empresariales. En esos escenarios, la aplicación no debe realizar todas las operaciones con una sola identidad con privilegios elevados. Debe intentar implementar el principio de privilegios mínimos configurando varias identidades con permisos específicos para tareas específicas. Para obtener más información sobre cómo configurar los roles de base de datos y la seguridad, consulte:

Prueba de la aplicación implementada

Vaya a la dirección URL de la aplicación para probar que funciona la conexión a Azure SQL Database. Puede encontrar la dirección URL de la aplicación en la página de información general de App Service. Incluya la ruta de acceso /person al final de la dirección URL para ir al mismo punto de conexión que ha probado localmente.

La persona que creó localmente debe mostrarse en el explorador. Enhorabuena, la aplicación ahora está conectada a Azure SQL Database en entornos locales y hospedados.

Limpiar los recursos

Cuando haya terminado de trabajar con Azure SQL Database, elimine el recurso para evitar costos no previstos.

  1. En la barra de búsqueda de Azure Portal, busque Azure SQL y seleccione el resultado coincidente.

  2. Busque y seleccione la base de datos en la lista de bases de datos.

  3. En la página Información general de Azure SQL Database, seleccione Eliminar.

  4. En la página Está seguro de que quiere eliminar… de Azure que se abre, escriba el nombre de la base de datos para confirmar y, después, seleccione Eliminar.

Nota:

Si implementó la aplicación de ejemplo en Azure, asegúrese de buscar y eliminar también el recurso de App Service para evitar costos no deseados.