Compartilhar via


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

Neste tutorial, você criará um app ASP.NET Core que usa uma integração .NET AspireEntity Framework CoreSQL Server para se conectar a SQL Server para ler e gravar dados de ticket de suporte. Entity Framework Core é um mapeador relacional de objeto leve, extensível e de software livre que permite que .NET desenvolvedores trabalhem com bancos de dados usando objetos .NET. Você aprenderá a:

  • Criar um aplicativo básico de .NET configurado para usar as integrações de .NET Aspire
  • Adicionar uma integração .NET Aspire para conectar ao SQL Server
  • Configurar e usar recursos do componente .NET.NET Aspire para ler e gravar no 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 instalação e ferramentas e .NET.NET Aspiredo SDK.

Criar a solução de exemplo

  1. Na parte superior do Visual Studio, navegue até >Novo>Projeto.
  2. Na janela de diálogo, pesquise Blazor e selecione Blazor Web App. Escolha Próximo.
  3. Na tela Configurar seu novo projeto:
    • Insira um de Nome do Projeto de AspireSQLEFCore.
    • Deixe o rest nos valores padrão e selecione Próximo.
  4. Na tela Informações adicionais:
    • Verifique se .NET 9.0 está selecionado.
    • Verifique se o modo de renderização interativo está definido como None.
    • Verifique a opção Enlistar em .NETorquestração.NET Aspire e selecione Criar.

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

  • AspireSQLEFCore: um projeto de Blazor que depende dos padrões de serviço.
  • AspireSQLEFCore.AppHost: um projeto de orquestrador projetado para conectar e configurar os diferentes projetos e serviços do seu aplicativo. O orquestrador deve ser definido como o projeto de inicialização.
  • AspireSQLEFCore.ServiceDefaults: uma biblioteca de classes compartilhada para manter configurações que podem ser reutilizadas nos projetos em sua solução.

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

Para representar uma solicitação de suporte enviada pelo usuário, adicione a seguinte classe de modelo SupportTicket na 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 na raiz do projeto AspireSQLEFCore. A classe herda System.Data.Entity.DbContext para trabalhar com o Entity Framework e representar o 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 Sql ao projeto AspireSQLEFCore:

dotnet add package Aspire.Microsoft.EntityFrameworkCore.SqlServer

Seu projeto AspireSQLEFCore agora está configurado para usar as 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 .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 padrões 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();

Esse método realiza as seguintes tarefas:

  • Registra um TicketContext com o contêiner de DI para se conectar ao Banco de Dados SQL Azure em contêineres.
  • Habilite automaticamente as verificações de integridade, o registro em log e a telemetria correspondentes.

Criar o banco de dados

Durante o desenvolvimento local, 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á em execução em um ambiente de desenvolvimento.
  • Se estiver, ele recuperará o serviço TicketContext do contêiner de DI e chamará Database.EnsureCreated() para criar o banco de dados se ele ainda não existir.

Nota

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 migrações. Para obter mais informações sobre migrações de Entity Framework Core no .NET Aspire, consulte Aplicar migrações Entity Framework Core em .NET Aspire.

Criar o formulário

O aplicativo requer um formulário para que o usuário possa enviar informações do chamado de suporte e salvar a entrada no banco de dados.

Utilize a seguinte marcação Razor para criar um formulário básico, substituindo o conteúdo do arquivo 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 em Blazor, consulte ASP.NET CoreBlazor visão geral dos formulários.

Configurar o AppHost

O projeto AspireSQLEFCore.AppHost é o orquestrador do seu app. 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 NuGet do Sql de Hospedagem ao projeto AspireStorage.AppHost:

dotnet add package Aspire.Hosting.SqlServer

Substitua o conteúdo do arquivo Program.cs no projeto AspireSQLEFCore.AppHost pelo 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 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 de formulário enviados são mantidos no banco de dados concluindo as seguintes etapas:

  1. Selecione o botão executar na parte superior do Visual Studio (ou F5) para iniciar seu painel de 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 aplicativo.

    Uma captura de tela mostrando a home page do aplicativo de suporte .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.

Consulte também