Sdílet prostřednictvím


Práce s daty

Tip

Tento obsah je výňatek z eBooku pro Blazor vývojáře webových formulářů ASP NET pro Azure, který je k dispozici na webu .NET Docs nebo jako bezplatný soubor PDF ke stažení, který si můžete přečíst offline.

Blazor-for-ASP-NET-Web-Forms-Developers eBook cover thumbnail.

Přístup k datům je páteřní součástí aplikace ASP.NET Web Forms. Pokud vytváříte formuláře pro web, co se stane s daty? U webových formulářů bylo k dispozici několik technik přístupu k datům, které byste mohli použít k interakci s databází:

  • Zdroje dat
  • ADO.NET
  • Entity Framework

Zdroje dat byly ovládací prvky, které můžete umístit na stránku webových formulářů a nakonfigurovat stejně jako jiné ovládací prvky. Visual Studio poskytlo popisnou sadu dialogů pro konfiguraci a vazbu ovládacích prvků na stránky webových formulářů. Vývojáři, kteří mají "nízký kód" nebo "žádný kód", preferovali tuto techniku při prvním vydání webových formulářů.

Data Sources

ADO.NET je přístup nízké úrovně k interakci s databází. Vaše aplikace můžou vytvořit připojení k databázi pomocí příkazů, datových tabulek a datových sad pro interakci. Výsledky by pak mohly být svázané s poli na obrazovce bez velkého množství kódu. Nevýhodou tohoto přístupu bylo, že každá sada ADO.NET objektů (Connection, Commanda DataTable) byla vázána na knihovny poskytované dodavatelem databáze. Použití těchto komponent ztuhlilo a ztěžovalo migraci kódu do jiné databáze.

Entity Framework

Entity Framework (EF) je opensourcová rozhraní pro mapování relačních objektů, kterou udržuje .NET Foundation. Systém EF původně vydaný s rozhraním .NET Framework umožňuje generovat kód pro připojení k databázi, schémata úložiště a interakce. Díky této abstrakci se můžete zaměřit na obchodní pravidla vaší aplikace a povolit správu databáze důvěryhodným správcem databáze. V .NET můžete použít aktualizovanou verzi EF s názvem EF Core. EF Core pomáhá generovat a udržovat interakce mezi kódem a databází pomocí řady příkazů, které jsou k dispozici pro vás pomocí nástroje příkazového dotnet ef řádku. Pojďme se podívat na několik ukázek, abychom vám umožnili pracovat s databází.

EF Code First

Rychlým způsobem, jak začít vytvářet interakce databáze, je začít s objekty třídy, se kterými chcete pracovat. EF poskytuje nástroj, který vám pomůže vygenerovat odpovídající databázový kód pro vaše třídy. Tento přístup se nazývá vývoj Code First. Podívejte se na následující Product třídu ukázkové aplikace pro výkladní skříň, kterou chceme uložit do relační databáze, jako je Microsoft SQL Server.

public class Product
{
    public int Id { get; set; }

    [Required]
    public string Name { get; set; }

    [MaxLength(4000)]
    public string Description { get; set; }

    [Range(0, 99999,99)]
    [DataType(DataType.Currency)]
    public decimal Price { get; set; }
}

Produkt má primární klíč a tři další pole, která by se vytvořila v naší databázi:

  • EF identifikuje Id vlastnost jako primární klíč podle konvence.
  • Name bude uložena ve sloupci nakonfigurované pro textové úložiště. Atribut [Required] dekorující tuto vlastnost přidá not null omezení, které pomůže vynutit toto deklarované chování vlastnosti.
  • Description bude uložen ve sloupci nakonfigurované pro textové úložiště a má maximální délku 4 000 znaků, jak [MaxLength] určuje atribut. Schéma databáze bude nakonfigurováno se sloupcem pojmenovaným MaxLength pomocí datového typu varchar(4000).
  • Vlastnost Price se uloží jako měna. Atribut [Range] vygeneruje vhodná omezení, aby se zabránilo ukládání dat mimo minimální a maximální deklarované hodnoty.

Tuto třídu potřebujeme přidat Product do třídy kontextu databáze, která definuje operace připojení a překladu s naší databází.

public class MyDbContext : DbContext
{
    public DbSet<Product> Products { get; set; }
}

Třída MyDbContext poskytuje jednu vlastnost, která definuje přístup a překlad třídy Product . Vaše aplikace nakonfiguruje tuto třídu pro interakci s databází pomocí následujících položek v Startup metodě třídy ConfigureServices (nebo v příslušném umístění v Program.cs pomocí builder.Services vlastnosti místo services):

services.AddDbContext<MyDbContext>(options =>
    options.UseSqlServer("MY DATABASE CONNECTION STRING"));

Předchozí kód se připojí k databázi SQL Serveru se zadaným připojovací řetězec. Připojovací řetězec můžete umístit do souboru appsettings.json, proměnných prostředí nebo jiných umístění úložiště konfigurace a odpovídajícím způsobem nahradit tento vložený řetězec.

Pak můžete vygenerovat tabulku databáze odpovídající této třídě pomocí následujících příkazů:

dotnet ef migrations add 'Create Product table'
dotnet ef database update

První příkaz definuje změny, které provádíte ve schématu databáze, jako novou migraci EF s názvem Create Product table. Migrace definuje, jak použít a odebrat změny nové databáze.

Po použití máte v databázi jednoduchou Product tabulku a některé nové třídy přidané do projektu, které pomáhají spravovat schéma databáze. Tyto vygenerované třídy můžete ve výchozím nastavení najít v nové složce s názvem Migrace. Když provedete změny Product třídy nebo přidáte další související třídy, které chcete pracovat s databází, budete muset příkazy příkazového řádku spustit znovu s novým názvem migrace. Tento příkaz vygeneruje další sadu tříd migrace pro aktualizaci schématu databáze.

EF Database First

Pro existující databáze můžete vygenerovat třídy pro EF Core pomocí nástrojů příkazového řádku .NET. Pokud chcete třídy vygenerovat, použijte variantu následujícího příkazu:

dotnet ef dbcontext scaffold "CONNECTION STRING" Microsoft.EntityFrameworkCore.SqlServer -c MyDbContext -t Product -t Customer

Předchozí příkaz se připojí k databázi pomocí zadaného připojovací řetězec a Microsoft.EntityFrameworkCore.SqlServer zprostředkovatele. Po připojení se vytvoří třída kontextu databáze s názvem MyDbContext . Kromě toho se vytvářejí podpůrné třídy pro Product tabulky, Customer které byly zadány s možnostmi -t . Pro tento příkaz existuje mnoho možností konfigurace, které generují hierarchii tříd, která je vhodná pro vaši databázi. Kompletní referenční informace najdete v dokumentaci k příkazu.

Další informace o EF Core najdete na webu Microsoft Docs.

Interakce s webovými službami

Při prvním vydání ASP.NET byly pro webové servery a klienty upřednostňovaným způsobem výměny dat služby SOAP. Od té doby se hodně změnilo a upřednostňované interakce se službami se přesunuly na přímé interakce klientů HTTP. S ASP.NET Core a Blazormůžete zaregistrovat konfiguraci Program.cs HttpClientnebo v Startup metodě třídy.ConfigureServices Tuto konfiguraci použijte, když potřebujete pracovat s koncovým bodem HTTP. Zvažte následující konfigurační kód:

// in Program.cs
builder.Services.AddHttpClient("github", client =>
{
    client.BaseAddress = new Uri("http://api.github.com/");
    // Github API versioning
    client.DefaultRequestHeaders.Add("Accept", "application/vnd.github.v3+json");
    // Github requires a user-agent
    client.DefaultRequestHeaders.Add("User-Agent", "BlazorWebForms-Sample");
});

Kdykoli potřebujete získat přístup k datům z GitHubu, vytvořte klienta s názvem github. Klient je nakonfigurovaný se základní adresou a hlavičky požadavku jsou správně nastavené. IHttpClientFactory Vložte Blazor do komponent direktivu @inject[Inject] nebo atributu vlastnosti. Pomocí následující syntaxe vytvořte pojmenovaného klienta a interagujte se službami:

@inject IHttpClientFactory factory

...

@code {
    protected override async Task OnInitializedAsync()
    {
        var client = factory.CreateClient("github");
        var response = await client.GetAsync("repos/dotnet/docs/issues");
        response.EnsureStatusCode();
        var content = await response.Content.ReadAsStringAsync();
    }
}

Tato metoda vrátí řetězec popisující kolekci problémů v úložišti dotnet/docs Na GitHubu. Vrátí obsah ve formátu JSON a deserializuje se do příslušných objektů problému GitHubu. Existuje mnoho způsobů, jak nakonfigurovat HttpClientFactory , aby poskytovala předkonfigurované HttpClient objekty. Zkuste nakonfigurovat více HttpClient instancí s různými názvy a koncovými body pro různé webové služby, se kterými pracujete. Tento přístup vám usnadní práci s těmito službami na každé stránce. Další informace najdete v tématu Vytváření požadavků HTTP pomocí IHttpClientFactory.