Huomautus
Tämän sivun käyttö edellyttää valtuutusta. Voit yrittää kirjautua sisään tai vaihtaa hakemistoa.
Tämän sivun käyttö edellyttää valtuutusta. Voit yrittää vaihtaa hakemistoa.
Koskee Microsoft Fabricin SQL-tietokantaa✅
Tässä opetusohjelmassa opit yhdistämään .NET Aspire -sovelluksesi SQL-tietokantaan Microsoft Fabricissa (esikatselu).
Fabricin SQL-tietokannan avulla voit yhdistää sovelluksesi nopeasti. Tässä artikkelissa yhdistät .NET Aspire -sovelluksen Fabricin SQL-tietokantaan mallirakenteen avulla AdventureWorksLT . Tässä opastuksessa käytetään Visual Studio Codea, jonka avulla voit yhdessä Fabricin kokeilukapasiteetin kanssa suorittaa koko vaiheittaisen vaiheen maksutta.
Prerequisites
- Lataa AdventureWorks-mallitiedot SQL-tietokantaan.
- Suorita pika-aloitus: Luo ensimmäinen .NET Aspire -ratkaisusi.
Käytä Visual Studio CodeaC# Dev Kit: -laajennuksen kanssa.
Käytä ratkaisun nimenä AspireSample-funktiota .
Varmista, että Aspire-mallisi ovat versio 9.3.0 tai uudempi. Jos sinun on päivitettävä, se ei häiritse nykyistä kehitystä. Voit päivittää seuraavalla komennolla:
dotnet new install Aspire.ProjectTemplates::9.3.0 --force
Lisää uusi sivu AdventureWorks-tuotetietojen näyttämistä varten
Pika-aloitus: Luo ensimmäinen .NET Aspire -ratkaisu luo uuden .NET Aspire -ratkaisun, jossa on ohjelmointirajapinta ja verkkoedusta. Ratkaisu sisältää seuraavat projektit:
-
AspireSample.ApiService: Web API -projekti, joka näyttää sääennusteet. -
AspireSample.AppHost: Orkestrointiprojekti, joka yhdistää ja määrittää sovelluksesi eri projektit ja palvelut. Määritä orkestraattori käynnistysprojektiksi. -
AspireSample.ServiceDefaults: Jaettu luokkakirjasto, joka sisältää uudelleenkäytettäviä määrityksiä ratkaisusi projekteissa. -
AspireSample.Web: Blazor-sovellus, joka tarjoaa ratkaisun käyttöliittymän.
Tietokantamallin ja kontekstiluokkien luominen
Asenna ensin EF Core projektiin AspireSample.ApiService .
Siirry
AspireSample.ApiServiceVisual Studio Coden pääteikkunassa projektihakemistoon ja suorita sitten:dotnet add package Aspire.Microsoft.EntityFrameworkCore.SqlServerJos haluat edustaa tuotetta, lisää projektin juureen
AspireSample.ApiServiceuusi tiedosto, jonka nimi onProduct.csseuraavallaProductmalliluokalla:using Microsoft.EntityFrameworkCore; using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Schema; namespace AspireSample.ApiService; [Table("Product", Schema = "SalesLT")] public sealed class Product { public int ProductID { get; set; } [Required] public string? Name { get; set; } public string ProductNumber { get; set; } = string.Empty; public string? Color { get; set; } [Precision(18, 2)] public decimal StandardCost { get; set; } = 0.0m; [Precision(18, 2)] public decimal ListPrice { get; set; } = 0.0m; public string? Size { get; set; } [Precision(8, 2)] public decimal? Weight { get; set; } public int? ProductCategoryID { get; set; } public int? ProductModelID { get; set; } public DateTime SellStartDate { get; set; } = DateTime.Now; public DateTime? SellEndDate { get; set; } public DateTime? DiscontinuedDate { get; set; } public byte[]? ThumbNailPhoto { get; set; } public string? ThumbnailPhotoFileName { get; set; } public Guid RowGuid { get; set; } = Guid.NewGuid(); public DateTime ModifiedDate { get; set; } = DateTime.Now; }Lisää uusi tiedosto, jonka nimi on
AdventureWorksDbContext.csseuraavallaAdventureWorksDbContexttietokontekstiluokalla projektin juureenAspireSample.ApiService. Luokkaa käytetäänSystem.Data.Entity.DbContextEF Coren kanssa työskentelyyn ja tietokantasi edustamiseen.using System.ComponentModel.DataAnnotations.Schema; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Options; namespace AspireSample.ApiService; public class AdventureWorksDbContext(DbContextOptions options) : DbContext(options) { public DbSet<Product> Products => Set<Product>(); }Tallenna muutokset valitsemalla Tiedosto>Tallenna kaikki.
Scalar-käyttöliittymän lisääminen API-projektiin
Käytä skalaarikäyttöliittymää projektin testaamiseen AspireSample.ApiService . Asennetaan ja määritetään se:
Siirry
AspireSample.ApiServiceVisual Studio Coden Pääte-ikkunassa projektihakemistoon ja suorita sitten:dotnet add package Scalar.AspNetCoreAvaa
Program.cstiedosto projektissaAspireSample.ApiService.Lisää seuraava koodirivi tiedoston alkuun:
using Scalar.AspNetCore;Etsi seuraavat koodirivit:
if (app.Environment.IsDevelopment()) { app.MapOpenApi(); }Muokkaa koodia vastaamaan seuraavia rivejä:
if (app.Environment.IsDevelopment()) { app.MapOpenApi(); app.MapScalarApiReference(_ => _.Servers = [ ]); }Tallenna muutokset valitsemalla Tiedosto>Tallenna kaikki.
Yhteysmerkkijonon määrittäminen sovelluksen isäntäprojektissa
Yleensä, kun luot pilvipohjaisen ratkaisun .NET Aspiren avulla, kutsut menetelmää Aspire.Hosting.SqlServerBuilderExtensions.AddSqlServer käynnistääksesi säilön, joka suorittaa SQL Server -esiintymän. Välität kyseisen resurssin ratkaisun muille projekteille, jotka tarvitsevat tietokannan käyttöoikeuden.
Tässä tapauksessa haluat kuitenkin käsitellä aiemmin luotua SQL-tietokantaa Fabricissa. App Host -projektissa on kolme eroa:
- Sinun ei tarvitse asentaa isännöintiintegraatiota
Aspire.Hosting.SqlServer. - Lisäät yhteysmerkkijonon määritystiedostoon, kuten
appsetting.json. - Kutsut
Aspire.Hosting.ParameterResourceBuilderExtensions.AddConnectionStringluodaksesi resurssin, jonka välität muihin projekteihin. Nämä projektit käyttävät tätä resurssia muodostaakseen yhteyden olemassa olevaan tietokantaan.
Toteutetaan tämä kokoonpano:
Avaa
appsetting.jsontiedosto Visual Studio CodessaAspireSample.AppHostprojektissa.Korvaa tiedoston koko sisältö seuraavalla koodilla:
{ "ConnectionStrings": { "sql": "sql_connection_string" }, "Logging": { "LogLevel": { "Default": "Information", "Microsoft.AspNetCore": "Warning", "Aspire.Hosting.Dcp": "Warning" } } }Siirry selaimessa SQL-tietokantaan, joka on ladattu AdventureWorks-mallitiedoilla.
Valitse asetuskuvake, valitse sitten Yhteysmerkkijonot ja kopioi koko ADO.NET yhteysmerkkijono.
Korvaa
sql_connection_stringappsetting.json tiedoston teksti ADO.NET juuri kopioimallasi yhteysmerkkijonolla.Avaa
AppHost.cstiedosto projektissaAspireSample.AppHost.Etsi seuraava koodirivi:
var builder = DistributedApplication.CreateBuilder(args);Lisää heti rivin jälkeen tämä koodirivi, joka hakee yhteysmerkkijonon määritystiedostosta:
var connectionString = builder.AddConnectionString("sql");Etsi seuraava koodirivi, joka luo resurssin projektille
AspireSample.ApiService:var apiService = builder.AddProject<Projects.AspireSample_ApiService>("apiservice") .WithHttpHealthCheck("/health");Muokkaa riviä vastaamaan seuraavaa koodia, joka luo resurssin ja välittää yhteysmerkkijonon sille:
var apiService = builder.AddProject<Projects.AspireSample_ApiService>("apiservice") .WithHttpHealthCheck("/health") .WithReference(connectionString);Tallenna muutokset valitsemalla Tiedosto>Tallenna kaikki.
Käytä tietokantaa API-projektissa
Kun palaat projektiin AspireSample.ApiService , sinun on hankittava yhteysmerkkijonoresurssi App Hostilta ja luotava sitten tietokanta sen avulla:
Avaa
Program.cstiedosto projektissaAspireSample.ApiService.Lisää seuraava koodirivi tiedoston alkuun:
using AspireSample.ApiService;Etsi seuraava koodirivi:
var builder = WebApplication.CreateBuilder(args);Lisää heti rivin jälkeen tämä koodirivi:
builder.AddSqlServerDbContext<AdventureWorksDbContext>("sql");Etsi seuraava koodirivi:
app.MapDefaultEndpoints();Lisää heti rivin jälkeen seuraavat koodirivit:
app.UseExceptionHandler("/Error", createScopeForErrors: true); app.UseHsts();Tallenna muutokset valitsemalla Tiedosto>Tallenna kaikki.
Koodin lisääminen tuotteiden kyselyyn tietokannasta
.NET Aspire -aloitusratkaisumallissa ohjelmointirajapinta luo viisi satunnaista sääennustetta ja palauttaa ne, kun toinen projekti pyytää niitä. Lisätään koodi, joka kyselee tietokantaa:
Avaa
Program.cstiedosto projektissaAspireSample.ApiService.Lisää tiedoston yläreunaan seuraavat koodirivit:
using Microsoft.AspNetCore.Mvc; using Microsoft.EntityFrameworkCore;Etsi seuraava koodi:
string[] summaries = ["Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching"]; app.MapGet("/weatherforecast", () => { var forecast = Enumerable.Range(1, 5).Select(index => new WeatherForecast ( DateOnly.FromDateTime(DateTime.Now.AddDays(index)), Random.Shared.Next(-20, 55), summaries[Random.Shared.Next(summaries.Length)] )) .ToArray(); return forecast; }) .WithName("GetWeatherForecast");Lisää heti koodin jälkeen seuraavat rivit:
app.MapGet("/productList", async ([FromServices] AdventureWorksDbContext context) => { var product = await context.Products.OrderBy(p=>p.ProductID).ToArrayAsync(); return product; }) .WithName("GetProductList");Tallenna muutokset valitsemalla Tiedosto>Tallenna kaikki.
Lisää koodi tietokannan tuotteiden näyttämiseen
.NET Aspire -aloitusratkaisumallissa verkkoprojekti sisältää muutaman esimerkkisivun. Lisätään toinen sivu, jolla näytetään tuotetiedot tietokannasta:
Avaa
AspireSample.Web.csprojtiedosto projektissaAspireSample.Web.Etsi seuraava koodi:
<ItemGroup> <ProjectReference Include="..\AspireSample.ServiceDefaults\AspireSample.ServiceDefaults.csproj" /> </ItemGroup>Lisää projektiviite esimerkiksi seuraaville
AspireSample.ApiServer:<ItemGroup> <ProjectReference Include="..\AspireSample.ServiceDefaults\AspireSample.ServiceDefaults.csproj" /> <ProjectReference Include="..\AspireSample.ApiService\AspireSample.ApiService.csproj" /> </ItemGroup>Jos haluat noutaa tuotetietueet, lisää uusi tiedosto, jonka nimi
ProductApiClient.cson seuraavallaProductApiClientluokalla projektin juureenAspireSample.Web:using AspireSample.ApiService; namespace AspireSample.Web; public class ProductApiClient(HttpClient httpClient) { public async Task<Product[]> GetProductAsync(int maxItems = 300, CancellationToken cancellationToken = default) { List<Product>? products = null; await foreach (var product in httpClient.GetFromJsonAsAsyncEnumerable<Product>("/productList", cancellationToken)) { if (products?.Count >= maxItems) { break; } if (product is not null) { products ??= []; products.Add(product); } } return products?.ToArray() ?? []; } }Avaa
Program.cstiedosto projektissaAspireSample.Web.Etsi seuraava koodi:
builder.Services.AddHttpClient<WeatherApiClient>(client => { // This URL uses "https+http://" to indicate HTTPS is preferred over HTTP. // Learn more about service discovery scheme resolution at https://aka.ms/dotnet/sdschemes. client.BaseAddress = new("https+http://apiservice"); });Lisää heti koodin jälkeen seuraavat rivit:
builder.Services.AddHttpClient<ProductApiClient>(client => { // This URL uses "https+http://" to indicate HTTPS is preferred over HTTP. // Learn more about service discovery scheme resolution at https://aka.ms/dotnet/sdschemes. client.BaseAddress = new("https+http://apiservice"); });Laajenna projektissa
AspireSample.WebKomponenttisivut-kansio>. Luo uusi tiedosto Pages-kansioon nimeltäProducts.razorja liitä siihen seuraava koodi:@using AspireSample.ApiService; @using Microsoft.AspNetCore.Components.Web @page "/products" @attribute [StreamRendering(true)] @attribute [OutputCache(Duration = 5)] @inject ProductApiClient ProductApi <PageTitle>Products</PageTitle> <h1>Products</h1> <p>This component demonstrates showing data loaded from a backend API service that reads data from a database.</p> @if (products == null) { <p><em>Loading...</em></p> } else { <table class="table"> <thead> <tr> <th>Thumbnail</th> <th>ProductID</th> <th>Name</th> <th>ProductNumber</th> <th>Color</th> <th>StandardCost</th> <th>ListPrice</th> <th>Size</th> <th>Weight</th> <th>ProductCategoryID</th> <th>ProductModelID</th> <th>SellStartDate</th> <th>SellEndDate</th> <th>DiscontinuedDate</th> <th>ThumbnailPhotoFileName</th> <th>RowGuid</th> <th>ModifiedDate</th> </tr> </thead> <tbody> @foreach (var product in products) { <tr> <td><img src="@GetImageString(product.ThumbNailPhoto)"/></td> <td>@product.ProductID</td> <td>@product.Name</td> <td>@product.ProductNumber</td> <td>@product.Color</td> <td>@product.StandardCost</td> <td>@product.ListPrice</td> <td>@product.Size</td> <td>@product.Weight</td> <td>@product.ProductCategoryID</td> <td>@product.ProductModelID</td> <td>@product.SellStartDate.ToShortDateString()</td> <td>@(product.SellEndDate?.ToShortDateString() ?? "N/A")</td> <td>@(product.DiscontinuedDate?.ToShortDateString() ?? "N/A")</td> <td>@product.ThumbnailPhotoFileName</td> <td>@product.RowGuid</td> <td>@product.ModifiedDate.ToShortDateString()</td> </tr> } </tbody> </table> } @code { private Product[]? products; protected override async Task OnInitializedAsync() { products = await ProductApi.GetProductAsync(); } private string GetImageString(byte[]? imageData) { if (imageData == null || imageData.Length == 0) { return ""; } //It is almost always better to store images and files outside of the database. return String.Concat("data:image/png;base64,", Convert.ToBase64String(imageData, 0, imageData.Length)); } }Laajenna projektissa
AspireSample.WebKomponenttien>asettelu -kansio.Avaa
NavMenu.razor.Etsi seuraava koodi:
<div class="nav-item px-3"> <NavLink class="nav-link" href="weather"> <span class="bi bi-list-nested" aria-hidden="true"></span> Weather </NavLink> </div>Lisää heti koodin jälkeen seuraavat rivit:
<div class="nav-item px-3"> <NavLink class="nav-link" href="products"> <span class="bi bi-list-nested" aria-hidden="true"></span> Products </NavLink> </div>Tallenna muutokset valitsemalla Tiedosto>Tallenna kaikki.
Suorita ja testaa sovellus paikallisesti
Mallisovellus on valmis testattavaksi.
Paina Visual Studio Codessa F5 käynnistääksesi .NET Aspire -projektin koontinäytön selaimessa.
Uusi välilehti avautuu, jossa sinua pyydetään kirjautumaan sisään Azureen. Kehote on todennettava SQL-tietokantaan. Ota tämä sovellus käyttöön käyttämällä palvelun tai käyttäjän määrittämää hallittua käyttäjätunnusta tai palvelun päänimeä. Jos haluat muuttaa todennustyyppiä, päivitä yhteysmerkkijono:
Salasanaton yhteysmerkkijono määrittää määritysarvoksi
Authentication="Active Directory Default", joka ohjaa kirjastoaMicrosoft.Data.SqlClientmuodostamaan yhteyden Azure SQL Databaseen käyttämällä luokkaa nimeltäDefaultAzureCredential.DefaultAzureCredentialottaa käyttöön salasanattomat yhteydet Azure-palveluihin, ja sen tarjoaa Azure-käyttäjätietokirjasto, josta SQL-asiakaskirjasto on riippuvainen.DefaultAzureCredentialTukee useita todennusmenetelmiä ja määrittää, mitä käytetään ajon aikana eri ympäristöissä.Note
Salasanattomat yhteysmerkkijonot on turvallista sitoa lähteenhallintaan, koska ne eivät sisällä salaisuuksia, kuten käyttäjänimiä, salasanoja tai käyttöoikeusavaimia.
Valitse punainen ympyrä, jossa on numero apiservicen tilan vieressä. Tämä avaa virhelokin, jossa on merkintä aina, kun tietokantayhteys aikakatkaistiin tunnistetietoja odotettaessa.
Valitse selaimen Takaisin-painike palataksesi Resurssit-välilehteen .
Odota, että webfrontendin tilaksi muuttuu Käynnissä. Valitse sitten URL-osoite.
Valitse uusi Tuotteet-sivu siirtymispalkista.
Selaa tuotteita. Joissakin tuotteissa on kuvia, kun taas toisissa näkyy "Ei kuvaa saatavilla" -kuva.
Lisää ominaisuuksia
Samaa tahtia vain!
- Lisää sivutus .NET Aspire Shop -mallin esimerkin avulla.
- Ota tietopäivitykset käyttöön käyttämällä esimerkkiä opetusohjelmasta: .NET Aspire -mikropalvelun yhdistäminen aiemmin luotuun tietokantaan.
- Ota sovelluksesi käyttöön Azure App Servicessä, Azure Container Appsissa, Azure Functionsissa tai Azure Kubernetes Servicessä (AKS) Service Connectorin avulla.