培训
模块
在 .NET Aspire 项目中使用数据库 - Training
了解 .NET Aspire 可以使用内置组件连接到的数据库系统。 然后,了解如何配置与关系数据库和非关系数据库中的连接,以及如何在其中存储数据。
认证
Microsoft Certified: Azure Data Fundamentals - Certifications
展示与 Microsoft Azure 数据服务相关的核心数据概念的基本知识。
在本教程中,你将创建一个 ASP.NET Core 应用,该应用使用 .NET AspireEntity Framework CoreSQL Server 集成连接到 SQL Server 来读取和写入支持票证数据。 Entity Framework Core 是一种轻型、可扩展的开源对象关系映射器,使 .NET 开发人员能够使用 .NET 对象处理数据库。 你将了解如何:
若要使用 .NET.NET Aspire,需要在本地安装以下各项:
有关详细信息,请参阅 .NET.NET Aspire 设置和工具,以及 .NET.NET Aspire SDK。
Visual Studio 创建了新的 ASP.NET Core 解决方案,该方案设计为使用 .NET Aspire。 该解决方案由以下项目组成:
若要表示用户提交的支持请求,请在 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;
}
在 TicketDbContext
项目的根目录中添加以下 数据上下文类。 该类继承 System.Data.Entity.DbContext 来处理 Entity Framework 并表示数据库。
using Microsoft.EntityFrameworkCore;
using System.Reflection.Metadata;
namespace AspireSQLEFCore;
public class TicketContext(DbContextOptions options) : DbContext(options)
{
public DbSet<SupportTicket> Tickets => Set<SupportTicket>();
}
将 .NET AspireEntity Framework Core Sql Server 库包 添加到 AspireSQLEFCore 项目中:
dotnet add package Aspire.Microsoft.EntityFrameworkCore.SqlServer
AspireSQLEFCore 项目现已设置为使用 .NET.NET Aspire 集成。 下面是更新的 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.1.0" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\AspireSQLEFCore.ServiceDefaults\AspireSQLEFCore.ServiceDefaults.csproj" />
</ItemGroup>
</Project>
在 Program.cs 项目的 文件中,在创建 AddSqlServerDbContext 后,但在调用 builder
之前添加对 AddServiceDefaults
扩展方法的调用。 有关详细信息,请参阅 .NET.NET Aspire 服务默认值。 提供连接字符串的名称作为参数。
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();
此方法完成以下任务:
TicketContext
,以便连接到容器化 Azure SQL 数据库。在本地开发时,需要在 SQL Server 容器中创建数据库。 使用以下代码更新 Program.cs 文件:
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();
}
前面的代码:
TicketContext
服务,并调用 Database.EnsureCreated()
以创建数据库(如果尚不存在)。备注
请注意,EnsureCreated()
不适用于生产环境,它仅创建上下文中定义的数据库。 它不应用任何迁移。 有关 Entity Framework Core中 .NET Aspire 迁移的详细信息,请参阅 .NET Aspire中应用 迁移。
应用需要一个表单,使用户能够提交支持票证信息并将条目保存到数据库。
使用以下 Razor 标记创建基本表单,替换 AspireSQLEFCore/Components/Pages 目录中 Home.razor 文件的内容:
@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();
}
}
有关在 Blazor中创建表单的详细信息,请参阅 ASP.NET CoreBlazor 窗体概述。
AspireSQLEFCore.AppHost 项目是您应用的协调器。 它负责连接和配置应用的不同项目和服务。 协调器应设置为启动项目。
将 .NET Aspire 托管的 Sql Server NuGet 包添加到你的 AspireStorage.AppHost 项目中:
dotnet add package Aspire.Hosting.SqlServer
将 Program.cs 项目中 文件的内容替换为以下代码:
var builder = DistributedApplication.CreateBuilder(args);
var sql = builder.AddSqlServer("sql")
.AddDatabase("sqldata");
builder.AddProject<Projects.AspireSQLEFCore>("aspiresql")
.WithReference(sql)
.WaitFor(sql);
builder.Build().Run();
前面的代码将 SQL Server 容器资源添加到应用,并配置与名为 sqldata
的数据库的连接。 之前配置的 Entity Framework 类会在迁移和连接到数据库时自动使用此连接。
示例应用现已准备好进行测试。 通过完成以下步骤,验证提交的表单数据是否持久保存到数据库:
选择 Visual Studio 顶部的运行按钮(或 F5),在浏览器中启动 .NET.NET Aspire 项目仪表板。
在项目页面中,在 AspireSQLEFCore 行中,单击 终结点 列中的链接以打开应用程序的界面。
在 Title
和 Description
窗体字段中输入示例数据。
选择 提交 按钮,表单提交支持票证进行处理 — (然后选择 清除 以清除表单)。
在页面重新加载时,提交的数据将显示在页面底部的表中。
关闭显示 AspireSQL Web 应用和 .NET.NET Aspire 仪表板的 Web 浏览器选项卡。
切换到 Visual Studio,若要停止调试,请选择停止按钮或按 Shift + F5。
若要第二次开始调试,请选择 Visual Studio 顶部的运行按钮(或 F5)。
在 .NET.NET Aspire 仪表板的“项目”页上,在 AspireSQLEFCore 行中,单击 终结点 列中的链接以打开应用的 UI。
请注意,页面不显示在上一次运行中创建的票证。
关闭显示 AspireSQL Web 应用和 .NET.NET Aspire 仪表板的 Web 浏览器选项卡。
切换到 Visual Studio,若要停止调试,请选择停止按钮或按 Shift + F5。
开发人员通常更喜欢在开发环境中使数据在重启之间保持持久性,以便在更真实的数据库环境中运行代码。 若要在 .NET.NET Aspire中实现持久性,请使用 WithDataVolume 方法。 此方法将 Docker 卷添加到数据库容器,每次重启调试时都不会销毁该卷。
在 Visual Studio中,在 AspireSQLEFCore.AppHost 项目中,双击 Program.cs 代码文件。
找到下列代码:
var sql = builder.AddSqlServer("sql")
.AddDatabase("sqldata");
修改该代码以匹配以下内容:
var sql = builder.AddSqlServer("sql")
.WithDataVolume()
.AddDatabase("sqldata");
让我们来看看数据量如何更改解决方案的行为:
Title
和 Description
窗体字段中输入示例数据。培训
模块
在 .NET Aspire 项目中使用数据库 - Training
了解 .NET Aspire 可以使用内置组件连接到的数据库系统。 然后,了解如何配置与关系数据库和非关系数据库中的连接,以及如何在其中存储数据。
认证
Microsoft Certified: Azure Data Fundamentals - Certifications
展示与 Microsoft Azure 数据服务相关的核心数据概念的基本知识。
文档
.NET Aspire PostgreSQL Entity Framework Core 集成 - .NET Aspire
了解如何使用 PostgreSQL(托管和客户端集成)将 .NET Aspire 与 Entity Framework Core 应用程序集成。
.NET Aspire Pomelo MySQLEntity Framework Core 集成 - .NET Aspire
了解如何使用 .NET AspireMySQL Entity Framework 集成,其中包括托管和客户端集成。
Oracle 实体框架组件
使用 Entity Framework Core 管理不同环境下的连接字符串