Bagikan melalui


Pembaruan hierarkis dalam pengembangan .NET Framework

Catatan

Himpunan data dan kelas terkait adalah teknologi .NET Framework warisan dari awal 2000-an yang memungkinkan aplikasi untuk bekerja dengan data dalam memori saat aplikasi terputus dari database. Himpunan data tersebut sangat berguna untuk aplikasi yang mengaktifkan pengguna guna memodifikasi data dan mempertahankan perubahan kembali ke database. Meskipun himpunan data telah terbukti menjadi teknologi yang sangat sukses, sebaiknya aplikasi .NET baru menggunakan Entity Framework Core. Entity Framework menyediakan cara yang lebih alami untuk bekerja dengan data tabular sebagai model objek, dan memiliki antarmuka pemrograman yang lebih sederhana.

Pembaruan hierarkis mengacu kepada proses menyimpan data yang diperbarui (dari himpunan data dengan dua tabel terkait atau lebih) kembali ke database sambil mempertahankan aturan integritas referensial. Integritas referensial mengacu kepada aturan konsistensi yang disediakan oleh batasan dalam database yang mengontrol perilaku menyisipkan, memperbarui, dan menghapus rekaman terkait. Misalnya, integritas referensial memberlakukan pembuatan rekaman pelanggan sebelum mengizinkan pesanan dibuat untuk pelanggan tersebut. Untuk informasi selengkapnya tentang hubungan dalam himpunan data, lihat Hubungan dalam himpunan data.

Fitur pembaruan hierarkis menggunakan TableAdapterManager untuk mengelola TableAdapter dalam himpunan data yang berjenis. Komponen TableAdapterManager adalah kelas yang dibuat Visual Studio, bukan jenis .NET. Saat Anda menarik tabel dari jendela Sumber Data ke halaman Formulir Windows atau WPF, Visual Studio menambahkan variabel jenis TableAdapterManager ke formulir atau halaman, dan Anda melihatnya di perancang di baki komponen. Untuk informasi mendetail tentang kelas TableAdapterManager, lihat bagian Referensi TableAdapterManager dari TableAdapters.

Secara default, himpunan data memperlakukan tabel terkait sebagai "hanya relasi", yang berarti tidak memberlakukan batasan kunci asing. Anda dapat mengubah pengaturan tersebut pada waktu desain dengan menggunakan Perancang Himpunan Data. Pilih garis relasi antara dua tabel untuk memunculkan kotak dialog Relasi. Perubahan yang Anda buat di sini akan menentukan caraTableAdapterManager berperilaku saat mengirimkan perubahan dalam tabel terkait kembali ke database.

Mengaktifkan pembaruan hierarkis dalam himpunan data

Secara default, pembaruan hierarkis diaktifkan untuk semua himpunan data baru yang ditambahkan atau dibuat dalam proyek. Aktifkan atau nonaktifkan pembaruan hierarkis dengan mengatur properti Pembaruan Hierarkis dari himpunan data yang berjenis dalam Himpunan data ke True atau False:

Pengaturan pembaruan hierarkis

Membuat hubungan baru antar-tabel

Untuk membuat hubungan baru antara dua tabel, di Perancang Himpunan Data, pilih bilah judul tiap tabel, lalu klik kanan dan pilih Tambahkan relasi.

Menu tambahkan hubungan pembaruan hierarkis

Memahami batasan kunci asing, pembaruan bertingkat, dan penghapusan

Penting untuk memahami cara batasan kunci asing dan perilaku bertingkat dalam database dibuat dalam kode himpunan data yang dibuat.

Secara default, tabel data dalam himpunan data dibuat dengan hubungan (DataRelation) yang cocok dengan hubungan dalam database. Akan tetapi, hubungan dalam himpunan data tidak dibuat sebagai batasan kunci asing. DataRelation dikonfigurasi sebagai Hanya Relasi tanpa UpdateRule atau DeleteRule berlaku.

Secara default, pembaruan bertingkat dan penghapusan bertingkat dinonaktifkan meskipun hubungan database diatur dengan pembaruan bertingkat atau penghapusan bertingkat diaktifkan. Misalnya, membuat pelanggan baru dan pesanan baru dan kemudian mencoba menyimpan data dapat menyebabkan konflik dengan batasan kunci asing yang ditentukan dalam database. Untuk informasi selengkapnya, lihat Menonaktifkan batasan saat mengisi himpunan data.

Mengatur urutan untuk melakukan pembaruan

Mengatur urutan untuk melakukan pembaruan akan mengatur urutan sisipan, pembaruan, dan penghapusan individual yang diperlukan untuk menyimpan semua data yang diubah di semua tabel himpunan data. Saat pembaruan hierarkis diaktifkan, sisipan dilakukan terlebih dahulu, lalu pembaruan, dan kemudian penghapusan. TableAdapterManager menyediakan properti UpdateOrder yang dapat diatur untuk melakukan pembaruan terlebih dahulu, lalu sisipan, dan kemudian penghapusan.

Catatan

Penting untuk dipahami bahwa urutan pembaruan semuanya inklusif. Artinya, saat pembaruan dilakukan, sisipan dan kemudian penghapusan dilakukan untuk semua tabel dalam himpunan data.

Untuk mengatur properti UpdateOrder, setelah menarik item dari Jendela Sumber Data ke formulir, pilih TableAdapterManager di baki komponen, dan kemudian atur properti UpdateOrder di jendela Properti.

Membuat salinan cadangan himpunan data sebelum melakukan pembaruan hierarkis

Saat Anda menyimpan data (dengan memanggil metode TableAdapterManager.UpdateAll()), TableAdapterManager berupaya memperbarui data untuk tiap tabel dalam satu transaksi. Jika bagian dari pembaruan untuk tabel apa pun gagal, seluruh transaksi akan digulung balik. Umumnya, gulung balik mengembalikan aplikasi Anda ke keadaan awalnya.

Akan tetapi, kadang Anda mungkin ingin memulihkan himpunan data dari salinan cadangan. Salah satu contoh ini mungkin terjadi saat Anda menggunakan nilai kenaikan otomatis. Misalnya, jika operasi penyimpanan tidak berhasil, nilai kenaikan otomatis tidak diatur ulang dalam himpunan data, dan himpunan data terus membuat nilai pertambahan bertahap otomatis. Ini meninggalkan celah dalam penomoran yang mungkin tidak dapat diterima dalam aplikasi Anda. Dalam situasi di mana ini adalah masalah, TableAdapterManager menyediakan properti BackupDataSetBeforeUpdate yang menggantikan himpunan data yang sudah ada dengan salinan cadangan jika transaksi gagal.

Catatan

Salinan cadangan hanya ada dalam memori saat metode TableAdapterManager.UpdateAll sedang berjalan. Oleh karena itu, tidak ada akses terprogram ke himpunan data cadangan ini karena ini menggantikan himpunan data asal atau keluar dari cakupan segera setelah metode TableAdapterManager.UpdateAll selesai berjalan.

Mengubah kode simpan yang dibuat untuk melakukan pembaruan hierarkis

Simpan perubahan dari tabel data terkait dalam himpunan data ke database dengan memanggil metode TableAdapterManager.UpdateAll dan meneruskan nama himpunan data yang berisi tabel terkait. Misalnya, jalankan metode TableAdapterManager.UpdateAll(NorthwindDataset) untuk mengirim pembaruan dari semua tabel di NorthwindDataset ke database ujung belakang.

Setelah Anda melepaskan item dari jendela Sumber Data, kode secara otomatis ditambahkan ke peristiwa Form_Load untuk mengisi tiap tabel (metode TableAdapter.Fill). Kode juga ditambahkan ke peristiwa klik tombol Simpan dari BindingNavigator untuk menyimpan data dari himpunan data kembali ke database (metode TableAdapterManager.UpdateAll).

Kode simpan yang dibuat juga berisi baris kode yang memanggil metode CustomersBindingSource.EndEdit. Lebih khusus lagi, kode ini memanggil metode EndEdit BindingSource pertama yang ditambahkan ke formulir. Dengan kata lain, kode ini hanya dibuat untuk tabel pertama yang ditarik dari jendela Sumber Data ke formulir. Panggilan EndEdit menerapkan perubahan apa pun yang sedang dalam proses dalam kontrol terikat data yang saat ini sedang diedit. Oleh karena itu, jika kontrol terikat data masih memiliki fokus dan Anda mengklik tombol Simpan, semua pengeditan yang tertunda dalam kontrol tersebut diterapkan sebelum penyimpanan aktual (metode TableAdapterManager.UpdateAll).

Catatan

Perancang Himpunan Data hanya menambahkan kode BindingSource.EndEdit untuk tabel pertama yang dilepaskan ke formulir. Oleh karena itu, Anda harus menambahkan baris kode untuk memanggil metode BindingSource.EndEdit untuk masing-masing tabel terkait pada formulir. Untuk panduan ini, ini berarti Anda harus menambahkan panggilan ke metode OrdersBindingSource.EndEdit.

  1. Klik dua kali tombol Simpan pada BindingNavigator untuk membuka Formulir1 di Editor Kode.

  2. Tambahkan baris kode untuk memanggil metode OrdersBindingSource.EndEdit setelah baris yang memanggil metode CustomersBindingSource.EndEdit. Kode di peristiwa klik tombol Simpan harus menyerupai berikut ini:

    this.Validate();
    this.customersBindingSource.EndEdit();
    this.ordersBindingSource.EndEdit();
    this.tableAdapterManager.UpdateAll(this.northwindDataSet);
    

Selain menerapkan perubahan pada tabel turunan terkait sebelum menyimpan data ke database, Anda mungkin juga harus menerapkan rekaman induk yang baru dibuat sebelum menambahkan rekaman turunan baru ke himpunan data. Dengan kata lain, Anda mungkin harus menambahkan rekaman induk baru (Customer) ke himpunan data sebelum batasan kunci asing memungkinkan rekaman anak baru (Orders) ditambahkan ke himpunan data. Untuk mencapai hal ini, Anda dapat menggunakan peristiwa BindingSource.AddingNew turunan.

Catatan

Apakah Anda harus menerapkan rekaman induk baru bergantung pada jenis kontrol yang digunakan untuk mengikat sumber data Anda. Dalam panduan ini, Anda menggunakan kontrol individual untuk mengikat ke tabel induk. Ini memerlukan kode tambahan untuk menerapkan rekaman induk baru. Jika rekaman induk ditampilkan dalam kontrol pengikatan kompleks seperti DataGridView, panggilan tambahan EndEdit ini untuk rekaman induk tidak akan diperlukan. Ini karena fungsi pengikatan data yang mendasari dari kontrol menangani penerapan rekaman baru.

Untuk menambahkan kode untuk menerapkan rekaman induk dalam himpunan data sebelum menambahkan rekaman turunan baru

  1. Membuat penanganan aktivitas untuk peristiwa OrdersBindingSource.AddingNew.

    • Buka Formulir1 dalam tampilan desain, pilih OrdersBindingSource di baki komponen, pilih Peristiwa di jendela Properti, dan kemudian klik dua kali peristiwa MenambahkanBaru.
  2. Tambahkan baris kode ke penanganan aktivitas yang memanggil metode CustomersBindingSource.EndEdit. Kode dalam penanganan aktivitas OrdersBindingSource_AddingNew harus menyerupai berikut ini:

    this.customersBindingSource.EndEdit();
    

Referensi TableAdapterManager

Secara default, kelas TableAdapterManager dibuat saat Anda membuat himpunan data yang berisi tabel terkait. Untuk mencegah kelas dibuat, ubah nilai properti Hierarchical Update himpunan data menjadi false. Saat Anda menyeret tabel yang memiliki hubungan ke permukaan desain halaman Formulir Windows atau WPF, Visual Studio akan mendeklarasikan variabel anggota kelas. Jika Anda tidak menggunakan pengikatan data, Anda harus mendeklarasikan variabel secara manual.

Kelas TableAdapterManager bukan jenis .NET. Oleh karena itu, Anda tidak dapat mencarinya dalam dokumentasi. Kelas ini dibuat pada waktu desain sebagai bagian dari proses pembuatan himpunan data.

Berikut ini adalah metode dan properti kelas TableAdapterManager yang sering digunakan:

Anggota Deskripsi
metode UpdateAll Menyimpan semua data dari semua tabel data.
Properti BackUpDataSetBeforeUpdate Menentukan apakah akan membuat salinan cadangan himpunan data sebelum menjalankan metode.Boolean TableAdapterManager.UpdateAll.
properti tableName TableAdapter Mewakili TableAdapter. TableAdapterManager yang dibuat berisi properti untuk tiap TableAdapter yang dikelolanya. Misalnya, himpunan data dengan tabel Pelanggan dan Pesanan dibuat dengan TableAdapterManager yang berisi properti CustomersTableAdapter dan OrdersTableAdapter.
Properti UpdateOrder Mengontrol urutan perintah sisipkan, perbarui, dan hapus individu. Atur ini ke salah satu nilai dalam enumerasi TableAdapterManager.UpdateOrderOption.

Secara default, UpdateOrder diset ke InsertUpdateDelete. Ini berarti bahwa sisipan, lalu pembaruan, dan kemudian penghapusan dilakukan untuk semua tabel dalam himpunan data.