Compartir a través de


Tutorial: Conexión de una aplicación de ASP.NET Core a SQL Server mediante .NET Aspire y Entity Framework Core

En este tutorial, crea una aplicación de ASP.NET Core que usa una integración de .NET AspireEntity Framework CoreSQL Server para conectarse a SQL Server para leer y escribir datos de tiquetes de soporte técnico. Entity Framework Core es un asignador relacional de objetos de código abierto ligero y extensible que permite a los desarrolladores de .NET trabajar con bases de datos mediante objetos .NET. Aprenderá a:

  • Creación de una aplicación de .NET básica que esté configurada para usar integraciones de .NET Aspire
  • Agregar una integración de .NET Aspire para conectar con SQL Server
  • Configurar y utilizar las funcionalidades de los componentes .NETy.NET Aspire para leer y escribir desde la base de datos

Prerrequisitos

Para trabajar con .NET.NET Aspire, necesita lo siguiente instalado localmente:

Para obtener más información, consulte configuración y herramientas de .NET.NET Aspirey sdk de .NET.NET Aspire.

Creación de la solución de ejemplo

  1. En la parte superior de Visual Studio, navegue a Archivo>Nuevo>Proyecto.
  2. En la ventana de diálogo, busque Blazor y seleccione Blazor Web App. Elija Siguiente.
  3. En la pantalla Configura tu nuevo proyecto:
    • Introduzca un nombre de proyecto de AspireSQLEFCore.
    • Deje el rest de los valores en sus configuraciones predeterminadas y seleccione Siguiente.
  4. En la pantalla de Información adicional :
    • Asegúrese de que .NET 9.0 esté seleccionado.
    • Asegúrese de que el modo de representación interactiva esté establecido en Ninguno .
    • Marque la opción Inscripción en .NET.NET Aspire de orquestación y seleccione Crear.

Visual Studio crea una solución nueva de ASP.NET Core que está estructurada para usar .NET Aspire. La solución consta de los siguientes proyectos:

  • AspireSQLEFCore: un proyecto de Blazor que depende de los valores predeterminados del servicio.
  • AspireSQLEFCore.AppHost: un proyecto de orquestador diseñado para conectar y configurar los diferentes proyectos y servicios de la aplicación. El orquestador debería configurarse como el proyecto de inicio.
  • AspireSQLEFCore.ServiceDefaults: una biblioteca de clases compartida para contener configuraciones que se pueden reutilizar en los proyectos de la solución.

Crear el modelo de base de datos y las clases de contexto

Para representar una solicitud de soporte técnico enviada por el usuario, agregue la siguiente clase de modelo SupportTicket en la raíz del proyecto de AspireSQLEFCore.

using System.ComponentModel.DataAnnotations;

namespace AspireSQLEFCore;

public sealed class SupportTicket
{
    public int Id { get; set; }
    [Required]
    public string Title { get; set; } = string.Empty;
    [Required]
    public string Description { get; set; } = string.Empty;
}

Agregue la siguiente clase de contexto de datos TicketDbContext en la raíz del proyecto AspireSQLEFCore. La clase hereda System.Data.Entity.DbContext para trabajar con Entity Framework y representar la base de datos.

using Microsoft.EntityFrameworkCore;
using System.Reflection.Metadata;

namespace AspireSQLEFCore;

public class TicketContext(DbContextOptions options) : DbContext(options)
{
    public DbSet<SupportTicket> Tickets => Set<SupportTicket>();
}

Incorporación de la integración de .NET Aspire a la aplicación Blazor

Agregue el paquete de biblioteca .NET AspireEntity Framework Core SQL Server a su proyecto AspireSQLEFCore.

dotnet add package Aspire.Microsoft.EntityFrameworkCore.SqlServer

El proyecto de AspireSQLEFCore ya está configurado para usar integraciones de .NET.NET Aspire. Aquí está el archivo AspireSQLEFCore.csproj actualizado:

<Project Sdk="Microsoft.NET.Sdk.Web">

  <PropertyGroup>
    <TargetFramework>net9.0</TargetFramework>
    <Nullable>enable</Nullable>
    <ImplicitUsings>enable</ImplicitUsings>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="Aspire.Microsoft.EntityFrameworkCore.SqlServer" Version="9.0.0" />
  </ItemGroup>

  <ItemGroup>
    <ProjectReference Include="..\AspireSQLEFCore.ServiceDefaults\AspireSQLEFCore.ServiceDefaults.csproj" />
  </ItemGroup>

</Project>

Configuración de la integración de .NET.NET Aspire

En el archivo Program.cs del proyecto AspireSQLEFCore , agregue una llamada al método de extensión AddSqlServerDbContext después de la creación del builder, pero antes de la llamada a AddServiceDefaults. Para obtener más información, consulte .NET.NET Aspire valores predeterminados del servicio. Proporcione el nombre de la cadena de conexión como parámetro.

using AspireSQLEFCore;
using AspireSQLEFCore.Components;

var builder = WebApplication.CreateBuilder(args);
builder.AddSqlServerDbContext<TicketContext>("sqldata");

builder.AddServiceDefaults();

// Add services to the container.
builder.Services.AddRazorComponents().AddInteractiveServerComponents();

var app = builder.Build();

app.MapDefaultEndpoints();

Este método realiza las siguientes tareas:

  • Registra un TicketContext en el contenedor DI para conectarse a la base de datos SQL Azure en contenedor.
  • Habilite automáticamente las comprobaciones de estado, el registro y la telemetría correspondientes.

Creación de la base de datos

Al desarrollar localmente, debe crear una base de datos dentro del contenedor de SQL Server. Actualice el archivo Program.cs con el código siguiente:

using AspireSQLEFCore;
using AspireSQLEFCore.Components;

var builder = WebApplication.CreateBuilder(args);
builder.AddSqlServerDbContext<TicketContext>("sqldata");

builder.AddServiceDefaults();

// Add services to the container.
builder.Services.AddRazorComponents().AddInteractiveServerComponents();

var app = builder.Build();

app.MapDefaultEndpoints();

if (app.Environment.IsDevelopment())
{
    using (var scope = app.Services.CreateScope())
    {
        var context = scope.ServiceProvider.GetRequiredService<TicketContext>();
        context.Database.EnsureCreated();
    }
}
else
{
    app.UseExceptionHandler("/Error", createScopeForErrors: true);
    // The default HSTS value is 30 days.
    // You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
    app.UseHsts();
}

El código anterior:

  • Comprueba si la aplicación se ejecuta en un entorno de desarrollo.
  • Si es así, recupera el servicio TicketContext del contenedor de inserción de dependencias y llama a Database.EnsureCreated() para crear la base de datos si aún no existe.

Nota

Tenga en cuenta que EnsureCreated() no es adecuado para entornos de producción y solo crea la base de datos tal como se define en el contexto. No aplica ninguna migración. Para obtener más información sobre las migraciones de Entity Framework Core en .NET Aspire, consulte la sección sobre cómo aplicar migraciones de Entity Framework Core en .NET Aspire.

Creación del formulario

La aplicación requiere un formulario para que el usuario pueda enviar información de incidencias de soporte técnico y guardar la entrada en la base de datos.

Utiliza el siguiente marcado de Razor para crear un formulario básico, reemplazando el contenido del archivo del Home.razor en el directorio AspireSQLEFCore/Components/Pages.

@page "/"
@inject TicketContext context

<div class="row">
    <div class="col-md-6">
        <div>
            <h1 class="display-4">Request Support</h1>
        </div>
        <EditForm Model="@Ticket" FormName="Tickets" method="post"
                  OnValidSubmit="@HandleValidSubmit" class="mb-4">
            <DataAnnotationsValidator />
            <div class="mb-4">
                <label>Issue Title</label>
                <InputText class="form-control" @bind-Value="@Ticket.Title" />
                <ValidationMessage For="() => Ticket.Title" />
            </div>
            <div class="mb-4">
                <label>Issue Description</label>
                <InputText class="form-control" @bind-Value="@Ticket.Description" />
                <ValidationMessage For="() => Ticket.Description" />
            </div>
            <button class="btn btn-primary" type="submit">Submit</button>
            <button class="btn btn-danger mx-2" type="reset" @onclick=@ClearForm>Clear</button>
        </EditForm>

        <table class="table table-striped">
            @foreach (var ticket in Tickets)
            {
                <tr>
                    <td>@ticket.Id</td>
                    <td>@ticket.Title</td>
                    <td>@ticket.Description</td>
                </tr>
            }
        </table>
    </div>
</div>

@code {
    [SupplyParameterFromForm(FormName = "Tickets")]
    private SupportTicket Ticket { get; set; } = new();

    private List<SupportTicket> Tickets = [];

    private void ClearForm() => Ticket = new();

    protected override async Task OnInitializedAsync()
    {
        Tickets = await context.Tickets.ToListAsync();
    }

    private async Task HandleValidSubmit()
    {
        context.Tickets.Add(Ticket);

        await context.SaveChangesAsync();

        Tickets = await context.Tickets.ToListAsync();

        ClearForm();
    }
}

Para obtener más información sobre la creación de formularios en Blazor, vea ASP.NET CoreBlazor forms overview.

Configuración de AppHost

El proyecto AspireSQLEFCore.AppHost es el orquestador de la aplicación. Es responsable de conectar y configurar los diferentes proyectos y servicios de la aplicación. El orquestador debe configurarse como proyecto de arranque.

Agregue el paquete NuGet .NET Aspire de hospedaje de Sql Server al proyecto de AspireStorage.AppHost:

dotnet add package Aspire.Hosting.SqlServer

Reemplace el contenido del archivo de Program.cs en el proyecto de AspireSQLEFCore.AppHost por el código siguiente:

var builder = DistributedApplication.CreateBuilder(args);

var sql = builder.AddSqlServer("sql")
                 .AddDatabase("sqldata");

builder.AddProject<Projects.AspireSQLEFCore>("aspiresql")
       .WithReference(sql)
       .WaitFor(sql);

builder.Build().Run();

El código anterior agrega un recurso contenedor de SQL Server a la aplicación y configura una conexión a una base de datos denominada sqldata. Las clases de Entity Framework que configuró anteriormente usarán automáticamente esta conexión al migrar y conectarse a la base de datos.

Ejecución y prueba local de la aplicación

La aplicación de ejemplo ya está lista para las pruebas. Compruebe que los datos del formulario enviado se conservan en la base de datos completando los pasos siguientes:

  1. Seleccione el botón Ejecutar situado en la parte superior de Visual Studio (o F5) para iniciar el panel del proyecto de .NET.NET Aspire en el explorador.

  2. En la página de proyectos, en la fila AspireSQLEFCore, haga clic en el vínculo en la columna de Puntos de Conexión para abrir la interfaz de usuario de tu aplicación.

    Captura de pantalla que muestra la página principal de la aplicación de soporte técnico de .NET.NET Aspire.

  3. Escriba datos de ejemplo en los campos de formulario Title y Description.

  4. Seleccione el botón Enviar, y el formulario envía el ticket de soporte para su procesamiento (a continuación, seleccione Borrar para borrar el formulario).

  5. Los datos enviados se muestran en la tabla de la parte inferior de la página cuando la página se vuelve a cargar.

Consulte también