Sdílet prostřednictvím


Kurz: Připojení aplikace ASP.NET Core k SQL Server pomocí .NET Aspire a Entity Framework Core

V tomto kurzu vytvoříte ASP.NET Core aplikaci, která používá integraci .NET AspireEntity Framework CoreSQL Server pro připojení k SQL Server ke čtení a zápisu dat lístku podpory. Entity Framework Core je jednoduchý, rozšiřitelný opensourcový mapovač relačních objektů, který umožňuje .NET vývojářům pracovat s databázemi pomocí .NET objektů. Naučíte se:

  • Vytvořte základní aplikaci .NET, která je nastavena k použití integrací .NET Aspire
  • Přidání integrace .NET Aspire pro připojení k SQL Server
  • Konfigurace a použití funkcí komponent .NET.NET Aspire ke čtení a zápisu z databáze

Požadavky

Pokud chcete pracovat s .NET.NET Aspire, potřebujete místně nainstalovat následující:

Další informace najdete v tématu .NET.NET Aspire nastavení a nástrojea .NET.NET Aspire SDK.

Vytvoření ukázkového řešení

  1. V horní části Visual Studiopřejděte na File>New>Project.
  2. V dialogovém okně vyhledejte Blazor a vyberte Blazor Web App. Zvolte Další.
  3. Na obrazovce Konfigurujte nový projekt:
    • Zadejte název projektuAspireSQLEFCore .
    • Ponechte výchozí nastavení hodnot rest a vyberte Další.
  4. Na obrazovce Další informace:
    • Ujistěte se, že je vybraná .NET 9.0.
    • Ujistěte se, že je Interaktivní režim vykreslování nastavený na Žádné.
    • Zaškrtněte možnost Zapsat do .NET.NET Aspire orchestrace a vyberte Vytvořit.

Visual Studio vytvoří nové ASP.NET Core řešení navržené pro použití .NET Aspire. Řešení se skládá z následujících projektů:

  • AspireSQLEFCore: Projekt Blazor, který závisí na výchozích nastaveních služby.
  • AspireSQLEFCore.AppHost: Projekt orchestrátoru navržený pro připojení a konfiguraci různých projektů a služeb vaší aplikace. Orchestrátor by měl být nastavený jako spouštěcí projekt.
  • AspireSQLEFCore.ServiceDefaults: Sdílená knihovna tříd, ve které se uchovávají konfigurace, které se dají opakovaně používat napříč projekty ve vašem řešení.

Vytvoření modelu databáze a tříd kontextu

Pokud chcete reprezentovat žádost o podporu odeslaný uživatelem, přidejte do kořenového adresáře projektu AspireSQLEFCore třídu modelu SupportTicket.

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

Do kořenového adresáře projektu AspireSQLEFCore přidejte následující třídu kontextu dat TicketDbContext. Třída dědí System.Data.Entity.DbContext, aby pracovala se systémem Entity Framework a reprezentovala vaši databázi.

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

namespace AspireSQLEFCore;

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

Přidání integrace .NET Aspire do aplikace Blazor

Do projektu AspireSQLEFCore přidejte balíček knihovny SQL :

dotnet add package Aspire.Microsoft.EntityFrameworkCore.SqlServer

Váš projekt AspireSQLEFCore je teď nastavený tak, aby používal integrace . Tady je aktualizovaný soubor AspireSQLEFCore.csproj:

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

Konfigurujte integraci .NET.NET Aspire

V souboru Program.cs projektu AspireSQLEFCore přidejte volání metody rozšíření AddSqlServerDbContext po vytvoření builder, ale před voláním AddServiceDefaults. Pro více informací se podívejte na .NET.NET Aspire výchozí nastavení služby. Jako parametr zadejte název připojovacího řetězce.

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

Tato metoda provádí následující úlohy:

  • Zaregistruje TicketContext v kontejneru DI pro připojení ke kontejnerizované Azure SQL Database.
  • Automaticky povolte odpovídající kontroly stavu, protokolování a telemetrii.

Vytvoření databáze

Při vývoji místně je potřeba vytvořit databázi uvnitř kontejneru SQL Server. Aktualizujte soubor Program.cs následujícím kódem:

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

Předchozí kód:

  • Zkontroluje, jestli aplikace běží ve vývojovém prostředí.
  • Pokud ano, načte službu TicketContext z kontejneru DI a zavolá Database.EnsureCreated() k vytvoření databáze, pokud ještě neexistuje.

Poznámka

Všimněte si, že EnsureCreated() není vhodný pro produkční prostředí a vytvoří databázi pouze definovanou v kontextu. Nepoužívá žádné migrace. Další informace o migracích Entity Framework Core v .NET Aspirenajdete v tématu Použití Entity Framework Core migrací v .NET Aspire.

Vytvoření formuláře

Aplikace vyžaduje formulář, aby uživatel mohl odeslat informace o podpoře a uložit záznam do databáze.

Pomocí následujícího kódu Razor vytvořte základní formulář a nahraďte obsah souboru Home.razor v adresáři 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();
    }
}

Další informace o vytváření formulářů v Blazornaleznete v ASP.NET CoreBlazor formuláře přehled.

Konfigurace apphostu

Projekt AspireSQLEFCore.AppHost je orchestrátorem vaší aplikace. Zodpovídá za připojení a konfiguraci různých projektů a služeb vaší aplikace. Orchestrátor by měl být nastavený jako spouštěcí projekt.

Do svého projektu AspireStorage.AppHost přidejte balíček NuGet .NET Aspire Hosting Sql Server.

dotnet add package Aspire.Hosting.SqlServer

Nahraďte obsah souboru Program.cs v projektu AspireSQLEFCore.AppHost následujícím kódem:

var builder = DistributedApplication.CreateBuilder(args);

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

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

builder.Build().Run();

Předchozí kód přidá do aplikace prostředek kontejneru SQL Server a nakonfiguruje připojení k databázi s názvem sqldata. Třídy Entity Framework, které jste nakonfigurovali dříve, automaticky použijí toto připojení při migraci a připojování k databázi.

Místní spuštění a otestování aplikace

Ukázková aplikace je teď připravená k testování. Pomocí následujících kroků ověřte, že se odeslaná data formuláře uchovávají v databázi:

  1. Výběrem tlačítka Spustit v horní části Visual Studio (nebo F5) spusťte řídicí panel projektu .NET.NET Aspire v prohlížeči.

  2. Na stránce projektů v řádku AspireSQLEFCore klikněte na odkaz ve sloupci Koncové body a otevřete uživatelské rozhraní aplikace.

    snímek obrazovky s domovskou stránkou podpory aplikace .NET.NET Aspire

  3. Do polí formuláře Title a Description zadejte ukázková data.

  4. Vyberte tlačítko Odeslat, a formulář odešle lístek podpory ke zpracování, a pak vyberte Vymazat, a formulář vyčistíte.

  5. Data, která jste odeslali, se zobrazí v tabulce v dolní části stránky, když se stránka znovu načte.

Viz také