Eğitim: .NET Aspire ve Entity Framework Core kullanarak bir ASP.NET Core uygulamasını SQL Server bağlama
Bu öğreticide, ASP.NET Core'e bağlanarak destek bileti verisini okumak ve yazmak için .NET AspireEntity Framework CoreSQL Server entegrasyonu kullanan bir SQL Server uygulaması oluşturacaksınız. Entity Framework Core, .NET geliştiricilerin .NET nesneleri kullanarak veritabanlarıyla çalışmasını sağlayan basit, genişletilebilir, açık kaynaklı bir nesne ilişkisel eşleyicidir. Nasıl yapılacağını öğreneceksiniz:
- .NET tümleştirmelerini kullanacak şekilde ayarlanmış temel bir .NET Aspire uygulaması oluşturma
- .NET Aspire'e bağlanmak için SQL Server tümleştirmesi ekleyin
- veritabanından okumak ve yazmak için .NET.NET Aspire Bileşeni özelliklerini yapılandırma ve kullanma
Önkoşullar
.NET .NET Aspireile çalışmak için aşağıdakilerin yerel olarak yüklenmesi gerekir:
- .NET 8.0 veya .NET 9.0
- OCI uyumlu bir konteyner çalışma zamanı örneğin:
- Docker masaüstü veya Podman. Daha fazla bilgi için bkz. Container runtime.
- Tümleşik Geliştirici Ortamı (IDE) veya kod düzenleyicisi, örneğin:
- Visual Studio 2022 sürüm 17.9 veya üzeri (İsteğe bağlı)
-
Visual Studio Code (İsteğe bağlı)
- C# Dev Kit: Uzantı (İsteğe bağlı)
- JetBrains Rider ile .NET.NET Aspire eklenti (İsteğe bağlı)
Daha fazla bilgi için bkz. .NET.NET Aspire kurulum ve araçve .NET.NET Aspire SDK.
Örnek çözümü oluşturma
- Visual Studioüst kısmında, Dosya>Yeni>Projeseçeneğine gidin.
- İletişim kutusunda Blazor arayın ve Blazor Web Uygulamasıseçin. Seçin Sonraki.
-
Yeni projenizi yapılandırın ekranında:
- AspireSQLEFCoreProje Adı girin.
- Kalan değerleri varsayılan değerlerinde bırakın ve İleriseçin.
-
Ek bilgiler ekranında:
- .NET 9.0 seçildiğinden emin olun.
- Etkileşimli işleme modunun Hiçbiriolarak ayarlandığından emin olun.
- Kaydolun .NET.NET Aspire düzenleme seçeneğini işaretleyin ve Oluştur seçeneğine tıklayın.
Visual Studio, ASP.NET Corekullanacak şekilde yapılandırılmış yeni bir .NET Aspire çözümü oluşturur. Çözüm aşağıdaki projelerden oluşur:
- AspireSQLEFCore: Hizmet varsayılanlarına bağlı bir Blazor projesi.
- AspireSQLEFCore.AppHost: Uygulamanızın farklı projelerini ve hizmetlerini bağlamak ve yapılandırmak için tasarlanmış bir düzenleyici projesi. Orkestratör başlangıç projesi olarak ayarlanmalıdır.
- AspireSQLEFCore.ServiceDefaults: Çözümünüzdeki projeler arasında yeniden kullanılabilecek yapılandırmaları barındıran paylaşılan bir sınıf kitaplığı.
Veritabanı modeli ve bağlam sınıflarını oluşturma
Kullanıcı tarafından gönderilen destek isteğini temsil etmek için, SupportTicket
projesinin köküne aşağıdaki model sınıfını ekleyin.
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
projesinin köküne aşağıdaki veri bağlam sınıfını ekleyin. sınıfı, Entity Framework ile çalışmak ve veritabanınızı temsil etmek için System.Data.Entity.DbContext devralır.
using Microsoft.EntityFrameworkCore;
using System.Reflection.Metadata;
namespace AspireSQLEFCore;
public class TicketContext(DbContextOptions options) : DbContext(options)
{
public DbSet<SupportTicket> Tickets => Set<SupportTicket>();
}
.NET Aspire uygulamasına Blazor tümleştirmesini ekleme
.NET Aspire projenize Entity Framework CoreServer Sql kitaplık paketi ekleyin:
dotnet add package Aspire.Microsoft.EntityFrameworkCore.SqlServer
AspireSQLEFCore projeniz artık .NET.NET Aspire tümleştirmelerini kullanacak şekilde ayarlandı. Güncelleştirilmiş AspireSQLEFCore.csproj dosyası aşağıdadır:
<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>
.NET .NET Aspire tümleştirmesini yapılandırma
Program.cs projesinin dosyasında, AddSqlServerDbContext oluşturulduktan sonra ancak builder
çağrısından önce AddServiceDefaults
uzantısı yöntemine bir çağrı ekleyin. Daha fazla bilgi için bkz. .NET.NET Aspire hizmet varsayılanları. Bağlantı dizenizin adını parametre olarak belirtin.
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();
Bu yöntem aşağıdaki görevleri gerçekleştirir:
- Kapsayıcılı
TicketContext
SQL Veritabanına bağlanmak için DI kapsayıcısına bir Azure kaydeder. - İlgili sağlık denetimlerini, günlüğe kaydetmeyi ve telemetriyi otomatik olarak etkinleştirin.
Veritabanını oluşturma
Yerel olarak geliştirme yaparken, SQL Server kapsayıcısının içinde bir veritabanı oluşturmanız gerekir. Program.cs dosyasını aşağıdaki kodla güncelleştirin:
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();
}
Önceki kod:
- Uygulamanın geliştirme ortamında çalışıp çalışmadığını denetler.
- Varsa, DI kapsayıcısından
TicketContext
hizmetini alır ve veritabanı henüz mevcut değilse oluşturmak içinDatabase.EnsureCreated()
çağırır.
Not
EnsureCreated()
üretim ortamları için uygun olmadığını ve veritabanını yalnızca bağlamda tanımlandığı gibi oluşturduğunu unutmayın. Herhangi bir geçiş uygulamaz.
Entity Framework Coreiçindeki .NET Aspire geçişleri hakkında daha fazla bilgi için Entity Framework Core'de .NET Aspire geçişlerini uygulama " bölümüne bakın.
Formu oluşturma
Uygulama, kullanıcının destek bileti bilgilerini gönderebilmesi ve girdiyi veritabanına kaydedebilmesi için bir form gerektirir.
AspireSQLEFCore/Components/Pages dizinindeki Home.razor dosyasının içeriğini değiştirerek temel bir form oluşturmak için aşağıdaki Razor işaretlemesini kullanın:
@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();
}
}
AppHost'ı yapılandırma
AspireSQLEFCore.AppHost projesi, uygulamanızın düzenleyicisidir. Uygulamanızın farklı proje ve hizmetlerini bağlamak ve yapılandırmak sizin sorumluluğunuzdadır. Orkestratör başlangıç projesi olarak ayarlanmalıdır.
.NET Aspire Hosting Sql Server NuGet paketini AspireStorage.AppHost projenize ekleyin:
dotnet add package Aspire.Hosting.SqlServer
Program.cs projesindeki dosyasının içeriğini aşağıdaki kodla değiştirin:
var builder = DistributedApplication.CreateBuilder(args);
var sql = builder.AddSqlServer("sql")
.AddDatabase("sqldata");
builder.AddProject<Projects.AspireSQLEFCore>("aspiresql")
.WithReference(sql)
.WaitFor(sql);
builder.Build().Run();
Yukarıdaki kod, uygulamanıza bir SQL Server Kapsayıcı kaynağı ekler ve sqldata
adlı bir veritabanına bağlantı yapılandırır. Daha önce yapılandırdığınız Entity Framework sınıfları, veritabanına geçiş ve veritabanına bağlanırken bu bağlantıyı otomatik olarak kullanır.
Uygulamayı yerel olarak çalıştırma ve test edin
Örnek uygulama artık test için hazırdır. Aşağıdaki adımları tamamlayarak gönderilen form verilerinin veritabanında kalıcı olduğunu doğrulayın:
proje panonuzu tarayıcıda başlatmak için üst kısmındaki çalıştır düğmesini (veya F5 ) seçin. Projeler sayfasındaki AspireSQLEFCore satırında, uygulamanızın kullanıcı arabirimini açmak için Uç Noktalar sütunundaki bağlantıya tıklayın.
Title
veDescription
form alanlarına örnek veriler girin.Gönder düğmesine basın, ve form işlenmek üzere destek talebini gönderir (ardından formu temizlemek için Temizle'yi seçin).
Gönderdiğiniz veriler, sayfa yeniden yüklenirken sayfanın en altındaki tabloda görüntülenir.
AspireSQL web uygulamasını ve .NET.NET Aspire panosunu görüntüleyen web tarayıcısı sekmelerini kapatın.
Visual Studio geçin ve hata ayıklamayı durdurmak için durdur düğmesini seçin veya Shift + F5 basın.
Hata ayıklamayı ikinci kez başlatmak için Visual Studio üst kısmındaki çalıştır düğmesini seçin (veya F5 ).
.NET .NET Aspire panosundaki projeler sayfasındaki AspireSQLEFCore satırında Uç Noktaları sütunundaki bağlantıya tıklayarak uygulamanızın kullanıcı arabirimini açın.
Sayfada önceki çalıştırmada oluşturduğunuz biletin görüntülenmediğini görebilirsiniz.
AspireSQL web uygulamasını ve .NET.NET Aspire panosunu görüntüleyen web tarayıcısı sekmelerini kapatın.
Visual Studio geçin ve hata ayıklamayı durdurmak için durdur düğmesini seçin veya Shift + F5 basın.
Verileri yeniden başlatmalar arasında kalıcı hale getirin.
Geliştiriciler genellikle daha gerçekçi bir veritabanının kod çalıştırması için geliştirme ortamındaki yeniden başlatmalarda verilerinin kalıcı olmasını tercih eder. .NET .NET Aspirekalıcılığı uygulamak için WithDataVolume yöntemini kullanın. Bu yöntemler veritabanı kapsayıcınıza bir Docker birimi ekler ve bu birim hata ayıklamayı her yeniden başlattığınızda yok olmaz.
"Visual Studioiçinde, AspireSQLEFCore.AppHost projesindeki Program.cs kod dosyasına çift tıklayın."
Şu kodu bulun:
var sql = builder.AddSqlServer("sql") .AddDatabase("sqldata");
Bu kodu aşağıdakilerle eşleşecek şekilde değiştirin:
var sql = builder.AddSqlServer("sql") .WithDataVolume() .AddDatabase("sqldata");
Veri kalıcılığını çalıştırma ve test edin
Şimdi veri hacminin çözümün davranışını nasıl değiştirişini inceleyelim:
proje panonuzu tarayıcıda başlatmak için üst kısmındaki çalıştır düğmesini (veya F5 ) seçin. - Projeler sayfasındaki AspireSQLEFCore satırında, uygulamanızın kullanıcı arabirimini açmak için Uç Noktalar sütunundaki bağlantıya tıklayın.
-
Title
veDescription
form alanlarına örnek veriler girin. - Gönder düğmesine basın, ve form işlenmek üzere destek talebini gönderir (ardından formu temizlemek için Temizle'yi seçin).
- Gönderdiğiniz veriler, sayfa yeniden yüklenirken sayfanın en altındaki tabloda görüntülenir.
- AspireSQL web uygulamasını ve .NET.NET Aspire panosunu görüntüleyen web tarayıcısı sekmelerini kapatın.
- Visual Studio geçin ve hata ayıklamayı durdurmak için durdur düğmesini seçin veya Shift + F5 basın.
- Hata ayıklamayı ikinci kez başlatmak için Visual Studio üst kısmındaki çalıştır düğmesini seçin (veya F5 ).
- .NET .NET Aspire panosundaki projeler sayfasındaki AspireSQLEFCore satırında Uç Noktaları sütunundaki bağlantıya tıklayarak uygulamanızın kullanıcı arabirimini açın.
- Sayfada artık önceki çalıştırmada oluşturduğunuz biletin görüntülendiğini görebilirsiniz.
Ayrıca bkz.
.NET Aspire