Aracılığıyla paylaş


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:

Daha fazla bilgi için bkz. .NET.NET Aspire kurulum ve araçve .NET.NET Aspire SDK.

Örnek çözümü oluşturma

  1. Visual Studioüst kısmında, Dosya>Yeni>Projeseçeneğine gidin.
  2. İletişim kutusunda Blazor arayın ve Blazor Web Uygulamasıseçin. Seçin Sonraki.
  3. Yeni projenizi yapılandırın ekranında:
    • AspireSQLEFCoreProje Adı girin.
    • Kalan değerleri varsayılan değerlerinde bırakın ve İleriseçin.
  4. 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çin Database.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();
    }
}

'da form oluşturma hakkında daha fazla bilgi için bkz.formlara genel bakış .

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 sqldataadlı 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:

  1. proje panonuzu tarayıcıda başlatmak için üst kısmındaki çalıştır düğmesini (veya F5) seçin.

  2. 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.

    .NET.NET Aspire destek uygulamasının giriş sayfasını gösteren ekran görüntüsü.

  3. Title ve Description form alanlarına örnek veriler girin.

  4. 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).

  5. Gönderdiğiniz veriler, sayfa yeniden yüklenirken sayfanın en altındaki tabloda görüntülenir.

  6. AspireSQL web uygulamasını ve .NET.NET Aspire panosunu görüntüleyen web tarayıcısı sekmelerini kapatın.

  7. Visual Studio geçin ve hata ayıklamayı durdurmak için durdur düğmesini seçin veya Shift + F5 basın.

  8. Hata ayıklamayı ikinci kez başlatmak için Visual Studio üst kısmındaki çalıştır düğmesini seçin (veya F5 ).

  9. .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.

  10. Sayfada önceki çalıştırmada oluşturduğunuz biletin görüntülenmediğini görebilirsiniz.

  11. AspireSQL web uygulamasını ve .NET.NET Aspire panosunu görüntüleyen web tarayıcısı sekmelerini kapatın.

  12. 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.

  1. "Visual Studioiçinde, AspireSQLEFCore.AppHost projesindeki Program.cs kod dosyasına çift tıklayın."

  2. Şu kodu bulun:

    var sql = builder.AddSqlServer("sql")
                     .AddDatabase("sqldata");
    
  3. 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:

  1. proje panonuzu tarayıcıda başlatmak için üst kısmındaki çalıştır düğmesini (veya F5) seçin.
  2. 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.
  3. Title ve Description form alanlarına örnek veriler girin.
  4. 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).
  5. Gönderdiğiniz veriler, sayfa yeniden yüklenirken sayfanın en altındaki tabloda görüntülenir.
  6. AspireSQL web uygulamasını ve .NET.NET Aspire panosunu görüntüleyen web tarayıcısı sekmelerini kapatın.
  7. Visual Studio geçin ve hata ayıklamayı durdurmak için durdur düğmesini seçin veya Shift + F5 basın.
  8. Hata ayıklamayı ikinci kez başlatmak için Visual Studio üst kısmındaki çalıştır düğmesini seçin (veya F5 ).
  9. .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.
  10. Sayfada artık önceki çalıştırmada oluşturduğunuz biletin görüntülendiğini görebilirsiniz.

Ayrıca bkz.