Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Wskazówka
Ta zawartość jest fragmentem książki eBook Blazor dla deweloperów formularzy internetowych platformy ASP NET dla platformy Azure, dostępnym na platformie .NET Docs lub jako bezpłatny plik PDF do pobrania, który można odczytać w trybie offline.
Dostęp do danych jest szkieletem aplikacji ASP.NET Web Forms. Co się stanie z danymi, jeśli tworzysz formularze dla sieci Web? W przypadku formularzy sieci Web istnieje wiele technik dostępu do danych, których można użyć do interakcji z bazą danych:
- Źródła danych
- ADO.NET
- Framework Jednostek
Źródła danych to kontrolki, które można umieścić na stronie formularzy sieci Web i skonfigurować tak jak inne kontrolki. Program Visual Studio udostępnił przyjazny zestaw okien dialogowych w celu skonfigurowania i powiązania kontrolek ze stronami formularzy sieci Web. Deweloperzy korzystający z podejścia "niskiego kodu" lub "braku kodu" preferowali tę technikę, gdy formularze Web Forms zostały wydane po raz pierwszy.
ADO.NET to podejście niskiego poziomu do interakcji z bazą danych. Aplikacje mogą utworzyć połączenie z bazą danych za pomocą poleceń, tabel danych i zestawów danych na potrzeby interakcji. Wyniki można następnie powiązać z polami na ekranie bez dużej ilości kodu. Wadą tego podejścia było to, że każdy zestaw obiektów ADO.NET (Connection
, Command
i DataTable
) był powiązany z bibliotekami dostarczonymi przez dostawcę bazy danych. Użycie tych składników sprawiło, że kod jest sztywny i trudny do migracji do innej bazy danych.
Framework Jednostek
Entity Framework (EF) to struktura mapowania obiektów typu open source utrzymywana przez program .NET Foundation. Początkowo wprowadzony wraz z .NET Framework, EF umożliwia generowanie kodu dla połączeń baz danych, schematów przechowywania i interakcji. Dzięki tej abstrakcji można skoncentrować się na regułach biznesowych aplikacji i zezwolić na zarządzanie bazą danych przez zaufanego administratora bazy danych. Na platformie .NET można użyć zaktualizowanej wersji programu EF o nazwie EF Core. Program EF Core pomaga w generowaniu i utrzymywaniu interakcji między kodem a bazą danych za pomocą szeregu poleceń, które są dostępne dla Ciebie za pomocą dotnet ef
narzędzia wiersza polecenia. Zobaczmy kilka przykładów, które pomogą Ci rozpocząć pracę z bazą danych.
EF Code First
Szybkim sposobem rozpoczęcia tworzenia interakcji z bazą danych jest rozpoczęcie od obiektów klas, z których chcesz pracować. Program EF udostępnia narzędzie ułatwiające generowanie odpowiedniego kodu bazy danych dla klas. Takie podejście jest nazywane programowaniem "Code First". Rozważmy następującą Product
klasę dla przykładowej aplikacji sklepu, którą chcemy przechowywać w relacyjnej bazie danych, takiej jak 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 ma klucz podstawowy i trzy dodatkowe pola, które zostaną utworzone w naszej bazie danych:
- Program EF zidentyfikuje
Id
właściwość jako klucz podstawowy zgodnie z konwencją. -
Name
będzie przechowywany w kolumnie skonfigurowanej do przechowywania tekstu. Atrybut[Required]
dekorujący tę właściwość dodanot null
ograniczenie, aby ułatwić wymuszanie tego zadeklarowanego zachowania właściwości. -
Description
będzie przechowywany w kolumnie skonfigurowanej do przechowywania tekstu i ma maksymalną długość skonfigurowaną 4000 znaków zgodnie z atrybutem[MaxLength]
. Schemat bazy danych zostanie skonfigurowany z kolumną o nazwieMaxLength
przy użyciu typuvarchar(4000)
danych . - Właściwość
Price
będzie przechowywana w formie waluty. Atrybut[Range]
wygeneruje odpowiednie ograniczenia, aby zapobiec przechowywaniu danych poza zadeklarowanymi wartościami minimalnymi i maksymalnymi.
Musimy dodać tę Product
klasę do klasy kontekstu bazy danych, która definiuje operacje połączenia i tłumaczenia z naszą bazą danych.
public class MyDbContext : DbContext
{
public DbSet<Product> Products { get; set; }
}
Klasa MyDbContext
udostępnia jedną właściwość, która definiuje dostęp i tłumaczenie dla Product
klasy. Aplikacja konfiguruje tę klasę pod kątem interakcji z bazą danych przy użyciu następujących wpisów w Startup
metodzie klasy ConfigureServices
(lub odpowiedniej lokalizacji w Program.cs przy użyciu builder.Services
właściwości zamiast services
):
services.AddDbContext<MyDbContext>(options =>
options.UseSqlServer("MY DATABASE CONNECTION STRING"));
Powyższy kod połączy się z bazą danych programu SQL Server z określonymi parametrami połączenia. Ciąg połączenia można umieścić w pliku appsettings.json, zmiennych środowiskowych lub innych lokalizacjach przechowywania konfiguracji i odpowiednio zastąpić ten osadzony ciąg.
Następnie możesz wygenerować tabelę bazy danych odpowiednią dla tej klasy przy użyciu następujących poleceń:
dotnet ef migrations add 'Create Product table'
dotnet ef database update
Pierwsze polecenie definiuje zmiany wprowadzone w schemacie bazy danych jako nową migrację ef o nazwie Create Product table
. Migracja definiuje sposób stosowania i usuwania nowych zmian bazy danych.
Po zastosowaniu masz prostą Product
tabelę w bazie danych i kilka nowych klas dodanych do projektu, które ułatwiają zarządzanie schematem bazy danych. Te wygenerowane klasy można znaleźć domyślnie w nowym folderze o nazwie Migrations( Migracje). Po wprowadzeniu zmian w klasie Product
lub dodaniu więcej powiązanych klas, które chcesz, aby interagowały z bazą danych, należy ponownie uruchomić polecenia wiersza poleceń z nową nazwą migracji. To polecenie spowoduje wygenerowanie innego zestawu klas migracji w celu zaktualizowania schematu bazy danych.
EF Database First
W przypadku istniejących baz danych można wygenerować klasy dla platformy EF Core przy użyciu narzędzi wiersza polecenia platformy .NET. Aby utworzyć szkielet klas, użyj odmiany następującego polecenia:
dotnet ef dbcontext scaffold "CONNECTION STRING" Microsoft.EntityFrameworkCore.SqlServer -c MyDbContext -t Product -t Customer
Poprzednie polecenie łączy się z bazą danych przy użyciu określonych parametrów połączenia i dostawcy Microsoft.EntityFrameworkCore.SqlServer
. Po nawiązaniu połączenia zostanie utworzona klasa kontekstu bazy danych o nazwie MyDbContext
. Ponadto klasy pomocnicze są tworzone dla tabel Product
i Customer
, które zostały określone z opcje -t
. Istnieje wiele opcji konfiguracji dla tego polecenia, aby wygenerować hierarchię klas odpowiednią dla bazy danych. Aby uzyskać pełną dokumentację, zobacz dokumentację polecenia.
Więcej informacji na temat platformy EF Core można znaleźć w witrynie Microsoft Docs.
Interakcja z usługami sieci Web
Po pierwszym wydaniu ASP.NET usługi SOAP były preferowanym sposobem wymiany danych przez serwery internetowe i klientów. Wiele zmieniło się od tego czasu, a preferowane interakcje z usługami zostały przeniesione do bezpośrednich interakcji klienta HTTP. Dzięki ASP.NET Core i Blazor, możesz zarejestrować konfigurację swojego HttpClient
w pliku Program.cs lub w metodzie Startup
klasy ConfigureServices
. Użyj tej konfiguracji, gdy musisz wchodzić w interakcję z punktem końcowym HTTP. Rozważmy następujący kod konfiguracji:
// 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");
});
Za każdym razem, gdy musisz uzyskać dostęp do danych z usługi GitHub, utwórz klienta o nazwie github
. Klient jest skonfigurowany przy użyciu adresu podstawowego, a nagłówki żądań są odpowiednio ustawiane. Wstrzyknij IHttpClientFactory
do swoich Blazor komponentów za pomocą dyrektywy @inject
lub atrybutu [Inject]
we właściwości. Utwórz nazwanego klienta i wchodź w interakcję z usługami, używając poniższej składni:
@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();
}
}
Ta metoda zwraca ciąg opisujący kolekcję problemów w repozytorium dotnet/docs GitHub. Zwraca on zawartość w formacie JSON i jest deserializowany do odpowiednich obiektów problemów z usługą GitHub. Istnieje wiele sposobów konfigurowania obiektu HttpClientFactory
w celu dostarczania wstępnie skonfigurowanych HttpClient
obiektów. Spróbuj skonfigurować wiele HttpClient
wystąpień o różnych nazwach i punktach końcowych dla różnych usług sieciowych, z którymi pracujesz. Podejście to sprawi, że interakcja z tymi usługami na każdej stronie będzie łatwiejsza. Aby uzyskać więcej informacji, zobacz Wysyłanie żądań HTTP przy użyciu IHttpClientFactory.