Självstudie: Ansluta en ASP.NET Core app till SQL Server med hjälp av .NET Aspire och Entity Framework Core
I den här självstudien skapar du en ASP.NET Core-app som använder en .NET AspireEntity Framework CoreSQL Server-integrering för att ansluta till SQL Server för att läsa och skriva supportärendedata. Entity Framework Core är en lätt, utökningsbar objektrelationsmappare med öppen källkod som gör det möjligt för .NET utvecklare att arbeta med databaser med hjälp av .NET objekt. Du får lära dig att:
- Skapa en grundläggande .NET app som är konfigurerad för att använda .NET Aspire integreringar
- Lägg till en .NET Aspire-integrering för att ansluta till SQL Server
- Konfigurera och använda .NET.NET Aspire komponentfunktioner för att läsa och skriva från databasen
Förutsättningar
Om du vill arbeta med .NET.NET Aspirebehöver du följande installerat lokalt:
- .NET 8,0 eller .NET 9,0
- En OCI-kompatibel container-runtime, till exempel:
- Docker Desktop eller Podman. Mer information finns i Container Runtime.
- En IDE (Integrated Developer Environment) eller kodredigerare, till exempel:
- Visual Studio 2022 version 17.9 eller senare (valfritt)
-
Visual Studio Code (valfritt)
- C# Dev Kit: Tillägg (valfritt)
- JetBrains Rider med .NET.NET Aspire insticksprogram (valfritt)
Mer information finns i .NET.NET Aspire installation och verktygoch .NET.NET Aspire SDK.
Skapa exempellösningen
- Överst i Visual Studionavigerar du till File>New>Project.
- I dialogrutan söker du efter Blazor och väljer Blazor Web App. Välj Nästa.
- På skärmen Konfigurera ditt nya projekt:
- Ange ett projektnamn för AspireSQLEFCore.
- Låt resten av värdena vara som standard och välj Nästa.
- På skärmen Ytterligare information:
- Kontrollera att .NET 9.0 är markerat.
- Kontrollera att interaktivt återgivningsläge är inställt på Ingen.
- Kontrollera alternativet Enlist i .NET.NET Aspire orchestration och välj Skapa.
Visual Studio skapar en ny ASP.NET Core lösning som är strukturerad för att använda .NET Aspire. Lösningen består av följande projekt:
- AspireSQLEFCore: Ett Blazor projekt som är beroende av tjänststandarder.
- AspireSQLEFCore.AppHost: Ett orchestrator-projekt som är utformat för att ansluta och konfigurera de olika projekten och tjänsterna i din app. Orkestratorn ska ställas in som startprojekt.
- AspireSQLEFCore.ServiceDefaults: Ett bibliotek för delad klass som innehåller konfigurationer som kan återanvändas mellan projekten i din lösning.
Skapa databasmodellen och kontextklasserna
Om du vill representera en användare som skickat supportbegäran lägger du till följande SupportTicket
modellklass i roten för AspireSQLEFCore-projektet.
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;
}
Lägg till följande TicketDbContext
-datakontextklass i roten för projektet AspireSQLEFCore. Klassen ärver från System.Data.Entity.DbContext för att arbeta med Entity Framework och för att representera din databas.
using Microsoft.EntityFrameworkCore;
using System.Reflection.Metadata;
namespace AspireSQLEFCore;
public class TicketContext(DbContextOptions options) : DbContext(options)
{
public DbSet<SupportTicket> Tickets => Set<SupportTicket>();
}
Lägg till .NET Aspire-integreringen i Blazor-appen
Lägg till .NET AspireEntity Framework Core Sql Server-bibliotekspaketet i ditt AspireSQLEFCore- projekt:
dotnet add package Aspire.Microsoft.EntityFrameworkCore.SqlServer
Ditt AspireSQLEFCore- projekt har nu konfigurerats för att använda .NET.NET Aspire integreringar. Här är den uppdaterade filen 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>
Konfigurera .NET.NET Aspire integration
I Program.cs-filen för projektet AspireSQLEFCore lägger du till ett anrop till AddSqlServerDbContext-tilläggsmetoden när builder
har skapats men innan anropet till AddServiceDefaults
. Mer information finns i .NET.NET Aspire tjänstens standardvärden. Ange namnet på anslutningssträngen som en parameter.
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();
Den här metoden utför följande uppgifter:
- Registrerar en
TicketContext
med DI-containern för anslutning till den containerbaserade Azure SQL Database. - Aktivera automatiskt motsvarande hälsokontroller, loggning och telemetri.
Skapa databasen
När du utvecklar lokalt måste du skapa en databas i SQL Server containern. Uppdatera filen Program.cs med följande kod:
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();
}
Föregående kod:
- Kontrollerar om appen körs i en utvecklingsmiljö.
- I så fall hämtar den
TicketContext
-tjänsten från DI-containern och anroparDatabase.EnsureCreated()
för att skapa databasen om den inte redan finns.
Not
Observera att EnsureCreated()
inte är lämplig för produktionsmiljöer och att den endast skapar databasen enligt definitionen i kontexten. Det tillämpar inga migreringar. Mer information om Entity Framework Core migreringar i .NET Aspirefinns i Tillämpa Entity Framework Core migreringar i .NET Aspire.
Skapa formuläret
Appen kräver ett formulär för att användaren ska kunna skicka in supportärendeinformation och spara posteringen i databasen.
Använd följande Razor-kod för att skapa ett grundläggande formulär och ersätt innehållet i Home.razor--filen i katalogen 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();
}
}
Mer information om hur du skapar formulär i Blazorfinns i ASP.NET CoreBlazor formuläröversikt.
Konfigurera AppHost
Projektet AspireSQLEFCore.AppHost är orchestrator för din app. Den ansvarar för att ansluta och konfigurera de olika projekten och tjänsterna i din app. Orkestratorn ska ställas in som startprojekt.
Lägg till .NET Aspire Hosting Sql Server NuGet-paketet till ditt AspireStorage.AppHost-projekt:
dotnet add package Aspire.Hosting.SqlServer
Ersätt innehållet i Program.cs-filen i projektet AspireSQLEFCore.AppHost med följande kod:
var builder = DistributedApplication.CreateBuilder(args);
var sql = builder.AddSqlServer("sql")
.AddDatabase("sqldata");
builder.AddProject<Projects.AspireSQLEFCore>("aspiresql")
.WithReference(sql)
.WaitFor(sql);
builder.Build().Run();
Föregående kod lägger till en SQL Server Container-resurs i din app och konfigurerar en anslutning till en databas med namnet sqldata
. Entity Framework-klasserna som du konfigurerade tidigare använder automatiskt den här anslutningen när du migrerar och ansluter till databasen.
Köra och testa appen lokalt
Exempelappen är nu redo för testning. Kontrollera att de inskickade formulärdata sparas i databasen genom att utföra följande steg:
Välj körningsknappen överst i Visual Studio (eller F5) för att starta instrumentpanelen för ditt .NET.NET Aspire projekt i webbläsaren.
På projektsidan i raden AspireSQLEFCore klickar du på länken i kolumnen Slutpunkter för att öppna appens användargränssnitt.
Ange exempeldata i formulärfälten
Title
ochDescription
.Välj knappen Skicka och formuläret skickar supportbegäran för bearbetning – (välj sedan Rensa för att rensa formuläret).
De data som du skickade visas i tabellen längst ned på sidan när sidan laddas om.
Se även
.NET Aspire