Partilhar via


Tutorial: Conectar um aplicativo ASP.NET Core a SQL Server usando .NET Aspire e Entity Framework Core

Neste tutorial, crias uma aplicação ASP.NET Core que utiliza uma integração de .NET AspireEntity Framework CoreSQL Server para conectar-se a SQL Server e ler e gravar dados de bilhetes de suporte. Entity Framework Core é um mapeador objeto-relacional leve, extensível e de código aberto que permite que os desenvolvedores .NET trabalhem com bancos de dados usando objetos .NET. Você aprenderá a:

  • Criar um aplicativo .NET básico configurado para usar integrações .NET Aspire
  • Adicione uma integração .NET Aspire para se conectar ao SQL Server
  • Configurar e usar os recursos do .NET.NET Aspire Component para ler e gravar a partir do banco de dados

Pré-requisitos

Para trabalhar com .NET.NET Aspire, você precisa do seguinte instalado localmente:

Para obter mais informações, consulte .NET.NET Aspirede configuração e ferramentas e .NET.NET Aspire SDK.

Criar a solução de exemplo

  1. No topo de Visual Studio, navegue até Ficheiro>Novo>Projeto.
  2. Na janela de diálogo, procure Blazor e selecione Blazor Web App. Escolha Próximo.
  3. No ecrã Configura o novo projeto:
    • Insira um Nome do Projeto de AspireSQLEFCore.
    • Deixe a rest dos valores nos seus valores predefinidos e selecione Seguinte.
  4. No ecrã de Informações adicionais :
    • Certifique-se de .NET 9.0 está selecionado.
    • Verifique se o modo de renderização interativo está definido como Nenhum.
    • Marque a opção Inscrever-se em .NET.NET Aspire orquestração e selecione Criar.

Visual Studio cria uma solução nova de ASP.NET Core que está estruturada para usar .NET Aspire. A solução consiste nos seguintes projetos:

  • AspireSQLEFCore: Um projeto Blazor que depende das configurações padrão de serviço.
  • AspireSQLEFCore.AppHost: Um projeto orquestrador projetado para conectar e configurar os diferentes projetos e serviços do seu aplicativo. O orquestrador deve ser definido como o projeto de arranque.
  • AspireSQLEFCore.ServiceDefaults: Uma biblioteca de classes compartilhada para armazenar configurações que podem ser reutilizadas em todos os projetos em sua solução.

Criar o modelo de banco de dados e as classes de contexto

Para representar um pedido de suporte enviado pelo utilizador, adicione a seguinte classe de modelo SupportTicket à raiz do projeto 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;
}

Adicione a seguinte classe de contexto de dados TicketDbContext na raiz do projeto AspireSQLEFCore. A classe herda System.Data.Entity.DbContext para trabalhar com o Entity Framework e representar seu banco de dados.

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

namespace AspireSQLEFCore;

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

Adicionar a integração .NET Aspire ao aplicativo Blazor

Adicione o pacote de biblioteca .NET AspireEntity Framework CoreServer Sql ao seu projeto AspireSQLEFCore.

dotnet add package Aspire.Microsoft.EntityFrameworkCore.SqlServer

Seu projeto AspireSQLEFCore agora está configurado para usar integrações .NET.NET Aspire. Aqui está o arquivo AspireSQLEFCore.csproj atualizado:

<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>

Configurar a integração de .NET.NET Aspire

No arquivo do projeto AspireSQLEFCore, adicione uma chamada ao método de extensão após a criação do mas antes da chamada para . Para obter mais informações, consulte .NET.NET Aspire valores padrão de serviço. Forneça o nome da cadeia de conexão como um 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 as seguintes tarefas:

  • Registra um TicketContext com o contêiner DI para conexão com o Banco de dados SQL Azure conteinerizado.
  • Habilite automaticamente as verificações de integridade, registro e telemetria correspondentes.

Criar a base de dados

Ao desenvolver localmente, você precisa criar um banco de dados dentro do contêiner SQL Server. Atualize o arquivo Program.cs com o seguinte código:

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();
}

O código anterior:

  • Verifica se o aplicativo está sendo executado em um ambiente de desenvolvimento.
  • Se estiver, ele recupera o serviço TicketContext do contêiner DI e chama Database.EnsureCreated() para criar o banco de dados, caso ele ainda não exista.

Observação

Observe que EnsureCreated() não é adequado para ambientes de produção e cria apenas o banco de dados conforme definido no contexto. Ele não aplica nenhuma migração. Para obter mais informações sobre migrações de Entity Framework Core no .NET Aspire, consulte para aplicar migrações de Entity Framework Core no .NET Aspire.

Criar o formulário

A aplicação requer um formulário para que o utilizador possa enviar informações de tíquete de suporte e guardar a entrada na base de dados.

Utilize a seguinte marcação Razor para criar um formulário básico, substituindo o conteúdo do ficheiro Home.razor no diretório 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 obter mais informações sobre como criar formulários no Blazor, consulte ASP.NET CoreBlazor visão geral de formulários.

Configurar o AppHost

O projeto AspireSQLEFCore.AppHost é o orquestrador da sua aplicação. Ele é responsável por conectar e configurar os diferentes projetos e serviços do seu aplicativo. O orquestrador deve ser definido como o projeto de inicialização.

Adicione o pacote .NET Aspire Hosting Sql Server NuGet ao seu projeto AspireStorage.AppHost.

dotnet add package Aspire.Hosting.SqlServer

Substitua o conteúdo do arquivo no projeto AspireSQLEFCore.AppHost com o seguinte código:

var builder = DistributedApplication.CreateBuilder(args);

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

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

builder.Build().Run();

O código anterior adiciona um recurso de contêiner de SQL Server ao seu aplicativo e configura uma conexão com um banco de dados chamado sqldata. As classes do Entity Framework configuradas anteriormente usarão automaticamente essa conexão ao migrar e se conectar ao banco de dados.

Executar e testar o aplicativo localmente

O aplicativo de exemplo agora está pronto para teste. Verifique se os dados do formulário enviado persistem no banco de dados concluindo as seguintes etapas:

  1. Selecione o botão Executar na parte superior do Visual Studio (ou F5) para iniciar o painel do projeto .NET.NET Aspire no navegador.

  2. Na página de projetos, na linha AspireSQLEFCore, clique no link na coluna Pontos de Extremidade para abrir a interface do usuário do seu aplicativo.

    Uma captura de tela mostrando a página inicial do aplicativo de suporte do .NET.NET Aspire.

  3. Insira dados de exemplo nos campos de formulário Title e Description.

  4. Selecione o botão Enviar e o formulário envia o tíquete de suporte para processamento (em seguida, selecione Limpar para limpar o formulário).

  5. Os dados enviados são exibidos na tabela na parte inferior da página quando a página é recarregada.

Ver também