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:
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.
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
.
Guna memperbarui kode untuk menerapkan perubahan pada tabel terkait sebelum menyimpan
Klik dua kali tombol Simpan pada BindingNavigator untuk membuka Formulir1 di Editor Kode.
Tambahkan baris kode untuk memanggil metode
OrdersBindingSource.EndEdit
setelah baris yang memanggil metodeCustomersBindingSource.EndEdit
. Kode di peristiwa klik tombol Simpan harus menyerupai berikut ini:
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
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.
Tambahkan baris kode ke penanganan aktivitas yang memanggil metode
CustomersBindingSource.EndEdit
. Kode dalam penanganan aktivitasOrdersBindingSource_AddingNew
harus menyerupai berikut ini:
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. |
Konten terkait
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk