Megosztás a következőn keresztül:


Adatkezelés

Jótanács

Ez a tartalom egy részlet az eBookból, Blazor az Azure-hoz készült ASP NET Web Forms Developers számára, amely elérhető a .NET Docs-on vagy egy ingyenesen letölthető PDF-fájlként, amely offline is olvasható.

Blazor-for-ASP-NET-Web-Forms-Developers eBook borító miniatűr.

Az adathozzáférés egy ASP.NET Web Forms-alkalmazás gerincét képezi. Ha webes űrlapokat készít, mi történik az adatokkal? A Web Formsban több adathozzáférési technikát is használhatott az adatbázisok kezeléséhez:

  • Adatforrások
  • ADO.NET
  • Entitás-keretrendszer

Az adatforrások olyan vezérlők voltak, amelyeket elhelyezhet egy weblapon, és más vezérlőkhöz hasonlóan konfigurálhatja őket. A Visual Studio számos párbeszédpanelt biztosított a vezérlők konfigurálásához és a webűrlapokhoz való kötéséhez. Az "alacsony kód" vagy "nincs kód" megközelítéssel rendelkező fejlesztők előnyben részesítették ezt a technikát a Web Forms első kiadásakor.

Adatforrások

ADO.NET az adatbázisokkal való interakció alacsony szintű megközelítése. Az alkalmazások létrehozhatnak kapcsolatot az adatbázissal parancsokkal, adattáblákkal és adatkészletekkel az interakcióhoz. Az eredmények ezután kód nélkül kötődhetnek a képernyőn lévő mezőkhöz. Ennek a megközelítésnek az a hátránya, Connectionhogy minden ADO.NET objektumCommand (és DataTable) egy adatbázis-szállító által biztosított kódtárakhoz volt kötve. Ezeknek az összetevőknek a használata merevsé tette a kódot, és megnehezítette a másik adatbázisba való migrálást.

Entitás-keretrendszer

Az Entity Framework (EF) a .NET Foundation által fenntartott nyílt forráskódú objektum-relációs leképezési keretrendszer. A .NET-keretrendszerben kezdetben megjelent EF lehetővé teszi az adatbázis-kapcsolatok, a tárolási sémák és az interakciók kódjának generálására. Ezzel az absztrakcióval az alkalmazás üzleti szabályaira összpontosíthat, és lehetővé teheti, hogy az adatbázist megbízható adatbázis-rendszergazda felügyelje. A .NET-ben használhatja az EF Core nevű frissített verzióját. Az EF Core segít létrehozni és fenntartani a kód és az adatbázis közötti interakciókat a parancssori eszköz használatával dotnet ef elérhető parancsok sorozatával. Nézzünk meg néhány mintát, hogy elkezdhessen dolgozni egy adatbázissal.

ELSŐ EF-kód

Az adatbázis-interakciók létrehozásának első lépéseit gyorsan meg lehet kezdeni a használni kívánt osztályobjektumokkal. Az EF egy eszközt biztosít az osztályok számára megfelelő adatbáziskód létrehozásához. Ezt a megközelítést "Code First" fejlesztésnek nevezzük. Fontolja meg az alábbi Product osztályt egy minta áruházbeli alkalmazáshoz, amelyet egy relációs adatbázisban, például a Microsoft SQL Serverben szeretnénk tárolni.

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; }
}

A termék rendelkezik egy elsődleges kulccsal és három további mezővel, amelyeket létrehozunk az adatbázisunkban:

  • Az EF konvenció szerint elsődleges kulcsként azonosítja a Id tulajdonságot.
  • Name a rendszer egy szövegtárolásra konfigurált oszlopban tárolja. A [Required] tulajdonságot dekoráló attribútum kényszert not null ad hozzá a tulajdonság deklarált viselkedésének érvényesítéséhez.
  • Description a rendszer egy szövegtárolásra konfigurált oszlopban tárolja, és legfeljebb 4000 karakter hosszúságú lesz az [MaxLength] attribútum által diktált módon. Az adatbázisséma egy adattípussal MaxLengthelnevezett varchar(4000) oszlopmal lesz konfigurálva.
  • A Price tulajdonság pénznemként lesz tárolva. Az [Range] attribútum megfelelő korlátozásokat hoz létre, hogy megakadályozza az adattárolást a deklarált minimális és maximális értékeken kívül.

Ezt az Product osztályt hozzá kell adnunk egy adatbázis környezeti osztályához, amely meghatározza az adatbázissal való kapcsolati és fordítási műveleteket.

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

Az MyDbContext osztály biztosítja azt a tulajdonságot, amely meghatározza a Product osztályhoz való hozzáférést és annak értelmezését. Az alkalmazás ezt az osztályt konfigurálja az adatbázissal való interakcióhoz az osztály Startup metódusának ConfigureServices következő bejegyzéseivel (vagy a tulajdonság helyett a megfelelő helyen builder.Servicesservices):

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

Az előző kód egy SQL Server-adatbázishoz fog csatlakozni a megadott kapcsolati sztringgel. A kapcsolati sztringet elhelyezheti a appsettings.json fájlban, környezeti változókban vagy más konfigurációs tárolóhelyeken, és megfelelően lecserélheti ezt a beágyazott sztringet.

Ezután a következő parancsokkal létrehozhatja az osztálynak megfelelő adatbázistáblát:

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

Az első parancs az adatbázisséma módosításait egy új, EF Migration nevű Create Product tablemigrálásként határozza meg. A migrálás meghatározza az új adatbázis-módosítások alkalmazását és eltávolítását.

Az alkalmazás után egy egyszerű Product táblával rendelkezik az adatbázisban, és hozzáad néhány új osztályt a projekthez, amelyek segítenek az adatbázisséma kezelésében. Ezeket a létrehozott osztályokat alapértelmezés szerint a Migrálások nevű új mappában találja. Ha módosítja az Product osztályt, vagy további kapcsolódó osztályokat szeretne hozzáadni az adatbázishoz, újra kell futtatnia a parancssori parancsokat az áttelepítés új nevével. Ez a parancs egy másik migrálási osztályt hoz létre az adatbázisséma frissítéséhez.

EF adatbázis elsőként

Meglévő adatbázisok esetén az EF Core osztályait a .NET parancssori eszközeivel hozhatja létre. Az osztályok szerkezetének létrehozásához használja a következő parancs egyik változatát:

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

Az előző parancs a megadott kapcsolati sztring használatával és a Microsoft.EntityFrameworkCore.SqlServer szolgáltatóval csatlakozik az adatbázishoz. A csatlakozás után létrejön egy adatbázis-környezetosztály neve MyDbContext . Emellett létrejönnek a támogatási osztályok azokhoz a táblákhoz, amelyeket a Product beállításokkal megadtak a Customer és -t táblákhoz. Ennek a parancsnak számos konfigurációs lehetősége van az adatbázisnak megfelelő osztályhierarchia létrehozásához. A teljes hivatkozásért tekintse meg a parancs dokumentációját.

Az EF Core-ról további információt a Microsoft Docs webhelyén talál.

Webszolgáltatások használata

A ASP.NET első megjelenésekor a SOAP-szolgáltatások voltak a webkiszolgálók és -ügyfelek számára az adatcsere előnyben részesített módja. Azóta sok minden megváltozott, és a szolgáltatásokkal való előnyben részesített interakciók a közvetlen HTTP-ügyfél-interakciókra változtak. Az ASP.NET Core és Blazor használatával regisztrálhatja a konfigurációját HttpClient a Program.cs fájlban vagy a Startup osztály ConfigureServices metódusában. Ezt a konfigurációt akkor használja, ha a HTTP-végponttal kell kommunikálnia. Vegye figyelembe a következő konfigurációs kódot:

// 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");
});

Amikor adatokat kell elérnie a GitHubról, hozzon létre egy ügyfelet, amelynek a neve github. Az ügyfél az alapcímmel van konfigurálva, és a kérésfejlécek megfelelően vannak beállítva. Az IHttpClientFactory összetevőt injektálja a Blazor komponensekbe a @inject irányelvvel vagy egy [Inject] attribútummal egy tulajdonságon. Hozzon létre egy névvel ellátott klienst, és használja a szolgáltatásokat a következő formátumban:

@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();
    }
}

Ez a metódus a dotnet/docs GitHub-adattárban található problémák gyűjteményét leíró sztringet adja vissza. JSON formátumú tartalmat ad vissza, és deszerializálja a megfelelő GitHub-problémaobjektumokba. Számos módon konfigurálhatja a HttpClientFactory-t, hogy előre konfigurált HttpClient objektumokat szolgáltasson. Próbáljon meg több HttpClient példányt konfigurálni különböző névvel és végpontokkal a különböző webszolgáltatásokhoz. Ez a megközelítés megkönnyíti az ezekkel a szolgáltatásokkal folytatott interakciókat az egyes oldalakon. További információ: HTTP-kérések létrehozása az IHttpClientFactory használatával.