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:
- .NET 8.0 o .NET 9.0
- Un entorno de ejecución de contenedor compatible con OCI, como:
- Docker de escritorio o Podman. Para obtener más información, consulte container runtime.
- Un entorno para desarrolladores integrado (IDE) o un editor de código, como:
- Visual Studio 2022 versión 17.9 o posterior (opcional)
-
Visual Studio Code (opcional)
- C# Dev Kit: extensión (opcional)
- JetBrains Rider con .NET.NET Aspire plugin (opcional)
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
- En la parte superior de Visual Studio, navegue a Archivo>Nuevo>Proyecto.
- En la ventana de diálogo, busque Blazor y seleccione Blazor Web App. Elija Siguiente.
- 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.
- 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 aDatabase.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:
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.
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.
Escriba datos de ejemplo en los campos de formulario
Title
yDescription
.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).
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
- .NET .NET Aspire con para la implementación del SQL Database
- .NET Aspire despliegue a través de Azure Container Apps
- Implementación de un proyecto de .NET Aspire mediante acciones de GitHub