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í:
- .NET 8.0 nebo .NET 9.0
- Modul runtime kontejneru kompatibilní s OCI, například:
- Docker desktop nebo Podman. Další informace viz běhové prostředí kontejneru.
- Integrované vývojové prostředí (IDE) nebo editor kódu, například:
- Visual Studio 2022 verze 17.9 nebo novější (volitelné)
-
Visual Studio Code (volitelné)
- C# Dev Kit: Rozšíření (volitelné)
- JetBrains Rider s .NETvolitelným.NET Aspire pluginem
Další informace najdete v tématu .NET.NET Aspire nastavení a nástrojea .NET.NET Aspire SDK.
Vytvoření ukázkového řešení
- V horní části Visual Studiopřejděte na File>New>Project.
- V dialogovém okně vyhledejte Blazor a vyberte Blazor Web App. Zvolte Další.
- Na obrazovce Konfigurujte nový projekt:
- Zadejte název projektuAspireSQLEFCore .
- Zbývající hodnoty ponechte ve výchozím nastavení a vyberte Další.
- 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 SupportTicket
třídu modelu .
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 TicketDbContext
přidejte následující třídu kontextu dat . 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
dotnet add package Aspire.Microsoft.EntityFrameworkCore.SqlServer
Váš projekt
<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.1.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
@using Microsoft.EntityFrameworkCore
<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 .NET Aspire přidejte balíček NuGet Server Hosting Sql .
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:
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.
Na stránce projektů v řádku AspireSQLEFCore klikněte na odkaz ve sloupci Koncové body a otevřete uživatelské rozhraní aplikace.
Do polí formuláře
Title
aDescription
zadejte ukázková data.Vyberte tlačítko Odeslat, a formulář odešle lístek podpory ke zpracování, a pak vyberte Vymazat, a formulář vyčistíte.
Data, která jste odeslali, se zobrazí v tabulce v dolní části stránky, když se stránka znovu načte.