Udostępnij za pośrednictwem


Samouczek: łączenie aplikacji ASP.NET Core z SQL Server przy użyciu .NET Aspire i Entity Framework Core

W tym samouczku utworzysz aplikację ASP.NET Core korzystającą z integracji .NET AspireEntity Framework CoreSQL Server w celu nawiązania połączenia z SQL Server w celu odczytu i zapisu danych zgłoszenia do pomocy technicznej. Entity Framework Core jest uproszczonym, rozszerzalnym maperem relacyjnym typu open source, który umożliwia deweloperom .NET pracę z bazami danych przy użyciu obiektów .NET. Dowiesz się, jak wykonywać następujące działania:

  • Tworzenie podstawowej aplikacji .NET skonfigurowanej do korzystania z integracji .NET Aspire
  • Dodaj integrację .NET Aspire, aby połączyć się z SQL Server
  • Konfigurowanie i używanie funkcji składnika .NET.NET Aspire do odczytu i zapisu z bazy danych

Warunki wstępne

Aby pracować z .NET.NET Aspire, musisz mieć zainstalowane lokalnie:

Aby uzyskać więcej informacji, zobacz .NET.NET Aspire setup and toolingi .NET.NET Aspire SDK.

Tworzenie przykładowego rozwiązania

  1. W górnej części Visual Studioprzejdź do File>New>Project.
  2. W oknie dialogowym wyszukaj Blazor i wybierz Blazor Web App. Wybierz pozycję Dalej.
  3. Na ekranie Skonfiguruj swój nowy projekt:
    • Wprowadź nazwę projektu AspireSQLEFCore.
    • Pozostaw wartości przy ich ustawieniach domyślnych rest i wybierz Dalej.
  4. Na ekranie Dodatkowe informacje:
    • Upewnij się, że wybrano .NET 9.0.
    • Upewnij się, że tryb renderowania interaktywnego ma ustawioną wartość None.
    • Zaznacz opcję Enlist in orchestration (Rejestrowanie ) i wybierz pozycję Create(Utwórz).

Visual Studio tworzy nowe rozwiązanie ASP.NET Core zaprojektowane do wykorzystywania .NET Aspire. Rozwiązanie składa się z następujących projektów:

  • AspireSQLEFCore: projekt Blazor, który zależy od ustawień domyślnych usługi.
  • AspireSQLEFCore.AppHost: projekt orkiestratora zaprojektowany pod kątem łączenia i konfigurowania różnych projektów i usług aplikacji. Orkiestrator powinien być ustawiony jako projekt startowy.
  • AspireSQLEFCore.ServiceDefaults: udostępniona biblioteka klas do przechowywania konfiguracji, które mogą być ponownie wykorzystywane w projektach rozwiązania.

Tworzenie modelu bazy danych i klas kontekstu

Aby reprezentować wniosek o pomoc zgłoszony przez użytkownika, dodaj następującą klasę modelu SupportTicket w głównej strukturze projektu 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;
}

Dodaj następującą klasę kontekstu danych TicketDbContext w katalogu głównym projektu AspireSQLEFCore. Klasa dziedziczy System.Data.Entity.DbContext, aby współpracować z Entity Framework i reprezentować bazę danych.

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

namespace AspireSQLEFCore;

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

Dodawanie integracji .NET Aspire do aplikacji Blazor

Dodaj pakiet biblioteki Sql do projektu AspireSQLEFCore:

dotnet add package Aspire.Microsoft.EntityFrameworkCore.SqlServer

Twój projekt AspireSQLEFCore jest teraz skonfigurowany do korzystania z integracji .NET.NET Aspire. Oto zaktualizowany plik 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>

Konfigurowanie integracji .NET.NET Aspire

W pliku projektu AspireSQLEFCore dodaj wywołanie metody rozszerzenia po utworzeniu , ale przed wywołaniem . Aby uzyskać więcej informacji, zobacz ustawienia domyślne usługi .NET.NET Aspire. Podaj nazwę ciągu połączenia jako parametr.

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

Ta metoda wykonuje następujące zadania:

  • Rejestruje TicketContext w kontenerze DI na potrzeby połączenia z konteneryzowaną bazą danych SQL Azure.
  • Automatyczne włączanie odpowiednich kontroli kondycji, rejestrowania i telemetrii.

Tworzenie bazy danych

Podczas tworzenia aplikacji lokalnie należy utworzyć bazę danych wewnątrz kontenera SQL Server. Zaktualizuj plik Program.cs przy użyciu następującego kodu:

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

Powyższy kod:

  • Sprawdza, czy aplikacja jest uruchomiona w środowisku projektowym.
  • Jeśli tak jest, pobiera usługę TicketContext z kontenera DI i wywołuje Database.EnsureCreated(), aby utworzyć bazę danych, jeśli jeszcze nie istnieje.

Notatka

Należy pamiętać, że EnsureCreated() nie jest odpowiednia dla środowisk produkcyjnych i tworzy bazę danych tylko zgodnie z definicją w kontekście. Nie stosuje żadnych migracji. Aby uzyskać więcej informacji na temat migracji Entity Framework Core w .NET Aspire, zobacz , jak zastosować migracje Entity Framework Core w .NET Aspire.

Tworzenie formularza

Aplikacja wymaga formularza, aby użytkownik mógł przesyłać informacje o zgłoszeniach pomocy technicznej i zapisywać te dane w bazie danych.

Użyj następującego znacznika Razor, aby utworzyć podstawowy formularz, zastępując zawartość pliku Home.razor w katalogu 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();
    }
}

Aby uzyskać więcej informacji na temat tworzenia formularzy w Blazor, zobacz omówienie formularzy ASP.NET CoreBlazor.

Konfigurowanie hosta AppHost

Projekt AspireSQLEFCore.AppHost jest koordynatorem dla twojej aplikacji. Odpowiada za łączenie i konfigurowanie różnych projektów i usług aplikacji. Orkiestrator powinien być ustawiony jako projekt startowy.

Dodaj pakiet .NET Aspire Hosting Sql Server NuGet do projektu AspireStorage.AppHost:

dotnet add package Aspire.Hosting.SqlServer

Zastąp zawartość pliku w projekcie AspireSQLEFCore.AppHost następującym kodem:

var builder = DistributedApplication.CreateBuilder(args);

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

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

builder.Build().Run();

Powyższy kod dodaje do aplikacji zasób kontenera SQL Server i konfiguruje połączenie z bazą danych o nazwie sqldata. Skonfigurowane wcześniej klasy programu Entity Framework będą automatycznie używać tego połączenia podczas migrowania i nawiązywania połączenia z bazą danych.

Uruchamianie i testowanie aplikacji lokalnie

Przykładowa aplikacja jest teraz gotowa do testowania. Sprawdź, czy przesłane dane formularza są utrwalane w bazie danych, wykonując następujące czynności:

  1. Wybierz przycisk uruchamiania w górnej części Visual Studio (lub F5), aby uruchomić pulpit nawigacyjny projektu .NET.NET Aspire w przeglądarce.

  2. Na stronie projektów, w wierszu AspireSQLEFCore, kliknij link w kolumnie Endpoints, aby otworzyć interfejs użytkownika aplikacji.

    Zrzut ekranu przedstawiający stronę główną aplikacji wsparcia .NET.NET Aspire.

  3. Wprowadź przykładowe dane w polach formularza Title i Description.

  4. Wybierz przycisk Prześlij, a formularz przesyła bilet pomocy technicznej do przetworzenia — (a następnie wybierz pozycję Wyczyść, aby wyczyścić formularz).

  5. Przesłane dane są wyświetlane w tabeli w dolnej części strony po ponownym załadowaniu strony.

Zobacz też