Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Petunjuk / Saran
Konten ini adalah kutipan dari eBook, Blazor untuk Pengembang ASP NET Web Forms untuk Azure, tersedia di .NET Docs atau sebagai PDF yang dapat diunduh gratis dan dapat dibaca secara offline.
Akses data adalah tulang punggung aplikasi ASP.NET Web Forms. Jika Anda membangun formulir untuk web, apa yang terjadi pada data tersebut? Dengan Formulir Web, ada beberapa teknik akses data yang dapat Anda gunakan untuk berinteraksi dengan database:
- Sumber Data
- ADO.NET
- Kerangka Kerja Entitas
Sumber Data adalah kontrol yang dapat Anda tempatkan di halaman Formulir Web dan dikonfigurasi seperti kontrol lainnya. Visual Studio menyediakan sekumpulan dialog yang ramah untuk mengonfigurasi dan mengikat kontrol ke halaman Formulir Web Anda. Pengembang yang menikmati pendekatan "kode rendah" atau "tanpa kode" lebih menyukai teknik ini ketika Formulir Web pertama kali dirilis.
ADO.NET adalah pendekatan tingkat rendah untuk berinteraksi dengan database. Aplikasi Anda dapat membuat koneksi ke database dengan Perintah, DataTable, dan Dataset untuk berinteraksi. Hasilnya kemudian dapat terikat ke bidang di layar tanpa banyak kode. Kelemahan dari pendekatan ini adalah bahwa setiap set objek ADO.NET (Connection
, Command
, dan DataTable
) terikat ke pustaka yang disediakan oleh vendor database. Penggunaan komponen-komponen ini membuat kode kaku dan sulit untuk dimigrasikan ke database yang berbeda.
Kerangka Kerja Entitas
Entity Framework (EF) adalah kerangka kerja pemetaan relasional objek sumber terbuka yang dikelola oleh .NET Foundation. Awalnya dirilis dengan .NET Framework, EF memungkinkan pembuatan kode untuk koneksi database, skema penyimpanan, dan interaksi. Dengan abstraksi ini, Anda dapat fokus pada aturan bisnis aplikasi Anda dan memungkinkan database dikelola oleh administrator database tepercaya. Di .NET, Anda dapat menggunakan versi EF yang diperbarui yang disebut EF Core. EF Core membantu menghasilkan dan memelihara interaksi antara kode Anda dan database dengan serangkaian perintah yang tersedia untuk Anda menggunakan dotnet ef
alat baris perintah. Mari kita lihat beberapa sampel untuk membuat Anda bekerja dengan database.
Kode EF Pertama
Cara cepat untuk mulai membangun interaksi database Anda adalah dengan memulai dengan objek kelas yang ingin Anda kerjakan. EF menyediakan alat untuk membantu menghasilkan kode database yang sesuai untuk kelas Anda. Pendekatan ini disebut pengembangan "Code First". Pertimbangkan kelas berikut Product
untuk contoh aplikasi etalase yang ingin kita simpan dalam database relasional seperti 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; }
}
Produk memiliki kunci primer dan tiga bidang tambahan yang akan dibuat dalam database kami:
- EF akan mengidentifikasi
Id
properti sebagai kunci utama berdasarkan konvensi. -
Name
akan disimpan dalam kolom yang dikonfigurasi untuk penyimpanan teks. Atribut[Required]
yang mendekorasi properti ini akan menambahkannot null
batasan untuk membantu menegakkan perilaku properti yang dinyatakan ini. -
Description
akan disimpan dalam kolom yang dikonfigurasi untuk penyimpanan teks, dan memiliki panjang maksimum yang dikonfigurasi 4000 karakter seperti yang ditentukan oleh[MaxLength]
atribut . Skema database akan dikonfigurasi dengan kolom bernamaMaxLength
menggunakan jenisvarchar(4000)
data . - Properti
Price
akan disimpan sebagai mata uang. Atribut[Range]
akan menghasilkan batasan yang sesuai untuk mencegah penyimpanan data di luar nilai minimum dan maksimum yang dideklarasikan.
Kita perlu menambahkan kelas ini Product
ke kelas konteks database yang menentukan operasi koneksi dan terjemahan dengan database kita.
public class MyDbContext : DbContext
{
public DbSet<Product> Products { get; set; }
}
Kelas MyDbContext
menyediakan satu properti yang menentukan akses dan terjemahan untuk Product
kelas . Aplikasi Anda mengonfigurasi kelas ini untuk interaksi dengan database menggunakan entri berikut dalam Startup
metode kelas ConfigureServices
(atau lokasi yang sesuai di Program.cs menggunakan builder.Services
properti alih-alih services
):
services.AddDbContext<MyDbContext>(options =>
options.UseSqlServer("MY DATABASE CONNECTION STRING"));
Kode sebelumnya akan tersambung ke database SQL Server dengan string koneksi yang ditentukan. Anda dapat menempatkan string koneksi di file appsettings.json , variabel lingkungan, atau lokasi penyimpanan konfigurasi lainnya dan mengganti string yang disematkan ini dengan tepat.
Anda kemudian dapat membuat tabel database yang sesuai untuk kelas ini menggunakan perintah berikut:
dotnet ef migrations add 'Create Product table'
dotnet ef database update
Perintah pertama menentukan perubahan yang Anda buat pada skema database sebagai Migrasi EF baru yang disebut Create Product table
. Migrasi menentukan cara menerapkan dan menghapus perubahan database baru Anda.
Setelah diterapkan, Anda memiliki tabel sederhana Product
di database Anda dan beberapa kelas baru ditambahkan ke proyek yang membantu mengelola skema database. Anda dapat menemukan kelas yang dihasilkan ini, secara default, di folder baru yang disebut Migrasi. Saat Anda membuat perubahan pada Product
kelas atau menambahkan lebih banyak kelas terkait yang ingin Anda berinteraksi dengan database, Anda perlu menjalankan perintah baris perintah lagi dengan nama baru migrasi. Perintah ini akan menghasilkan serangkaian kelas migrasi lain untuk memperbarui skema database Anda.
Database EF Pertama
Untuk database yang ada, Anda dapat menghasilkan kelas untuk EF Core dengan menggunakan alat baris perintah .NET. Untuk membangun perancah kelas, gunakan variasi dari perintah berikut:
dotnet ef dbcontext scaffold "CONNECTION STRING" Microsoft.EntityFrameworkCore.SqlServer -c MyDbContext -t Product -t Customer
Perintah sebelumnya terhubung ke database menggunakan string koneksi yang ditentukan dan penyedia Microsoft.EntityFrameworkCore.SqlServer
. Setelah tersambung, kelas konteks database bernama MyDbContext
dibuat. Selain itu, kelas pendukung dibuat untuk tabel Product
dan Customer
yang telah ditentukan menggunakan opsi -t
. Ada banyak opsi konfigurasi untuk perintah ini untuk menghasilkan hierarki kelas yang sesuai untuk database Anda. Untuk referensi lengkap, lihat dokumentasi perintah.
Informasi selengkapnya tentang EF Core dapat ditemukan di situs Microsoft Docs.
Berinteraksi dengan layanan web
Ketika ASP.NET pertama kali dirilis, layanan SOAP adalah cara yang disukai bagi server web dan klien untuk bertukar data. Banyak yang telah berubah sejak saat itu, dan interaksi pilihan dengan layanan telah beralih ke interaksi klien HTTP langsung. Dengan ASP.NET Core dan Blazor, Anda dapat mendaftarkan konfigurasi HttpClient
Anda di Program.cs atau dalam metode Startup
kelas ConfigureServices
. Gunakan konfigurasi tersebut saat Anda perlu berinteraksi dengan titik akhir HTTP. Pertimbangkan kode konfigurasi berikut:
// 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");
});
Setiap kali Anda perlu mengakses data dari GitHub, buat klien dengan nama github
. Klien dikonfigurasi dengan alamat dasar, dan header permintaan diatur dengan semestinya. Masukkan IHttpClientFactory
ke dalam komponen Blazor Anda dengan direktif @inject
atau atribut [Inject]
pada properti. Buat klien bernama Anda dan berinteraksi dengan layanan menggunakan sintaks berikut:
@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();
}
}
Metode ini mengembalikan string yang menjelaskan kumpulan masalah di repositori GitHub dotnet/docs . Ini mengembalikan konten dalam format JSON dan dideserialisasi ke dalam objek masalah GitHub yang sesuai. Ada banyak cara untuk mengonfigurasi HttpClientFactory
untuk mengirimkan objek yang telah dikonfigurasi HttpClient
sebelumnya. Coba konfigurasikan beberapa HttpClient
instans dengan nama dan titik akhir yang berbeda untuk berbagai layanan web yang anda kerjakan. Pendekatan ini akan membuat interaksi Anda dengan layanan tersebut lebih mudah dikerjakan di setiap halaman. Untuk informasi selengkapnya, lihat Membuat permintaan HTTP menggunakan IHttpClientFactory.