Bagikan melalui


Bekerja dengan data

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.

Blazor-for-ASP-NET-Web-Forms-Developers gambar mini sampul eBook.

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.

Sumber Data

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 menambahkan not 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 bernama MaxLength menggunakan jenis varchar(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.