Proyek Blazor Server #3

Implementasi checkbox list pada operasi CRUD melibatkan M:N relationship menggunakan Dapper

M. Ramadhan
Telematika
27 min readNov 24, 2020

--

CRUD (Create, Read, Update, Delete) merupakan fitur yang harus ada pada aplikasi yang menggunakan basis data. Dalam dua artikel sebelumnya, telah dibahas bagaimana penerapan operasi CRUD untuk:
(1) tabel tunggal
(2) dua tabel dengan N:1 (banyak ke satu) relationship.

Artikel ini berfokus pada penerapan checkbox list pada operasi CRUD yang melibatkan relationship M:N (banyak-ke-banyak) Author-write-Book, seperti yang ditunjukkan pada diagram ER berikut.

Relationship Author-write-Book menghasilkan tiga tabel, yaitu Book, BookAuthor, dan Author.

Saya memodifikasi hampir semua kode proyek sebelumnya, Proyek Blazor Server #1 dan Proyek Blazor Server #2, sehingga tampilan komponen halaman jauh lebih rapi, dan nama metode lebih konsisten.

Tinjawan Sekilas Halaman CRUD

Daftar Buku

Berikut adalah tangkapan layar daftar buku yang melibatkan relationship M:N (Author-write-Book) dan relationship 1:N (Publisher-publish-book). Untuk relationship1:N, silakan baca artikel sebelumnya di sini.

  • Author di kolom ketiga menunjukkan relationship M:N. Seorang penulis dapat menulis banyak buku; misalnya, David M. Kroenke menulis dua buku. Sebaliknya, satu buku boleh jadi ditulis oleh banyak penulis; misalnya, Database Processing ditulis oleh dua penulis.
  • Daftar diurutkan menurun berdasarkan Purchase Date. Dengan mengklik judul kolom Purchase Date, urutan berubah dari mengecil menjadi membesar. Hal yang sama berlaku untuk kolom lain.
  • Tombol navigasi:
    pergi ke halaman sebelumnya
    pergi ke halaman berikutnya
    1, 2, 3, ... nomor halaman
  • Untuk mencari buku berdasarkan kriteria judul, ketikkan judul di kotak pencarian. Judul tidak harus lengkap.
  • Untuk menambahkan data buku baru, klik Add new book.
  • Untuk mengubah data yang ada, klik Edit.
  • Untuk menghapus, klik Delete.

Menambahkan Data Buku

Berikut adalah contoh halaman untuk menambahkan data buku. Belum ada input data untuk penulis. Data penulis dapat diinput setelah buku disimpan.

  • Klik Save, daftar kotak centang penulis muncul.
  • Masukkan urutan penulis dan klik kotak centang, seperti yang ditunjukkan pada gambar di atas.
  • Buku ditulis oleh tiga penulis. Penulis ketiga belum ada dalam daftar, jadi klik tombol Add author.
  • Klik Save, penulis baru muncul dalam daftar.
  • Sebagaimana terlihat pada gambar di atas, masukkan urutan penulis ketiga dan klik kotak centang.

Mengedit Data Buku

Berikut adalah contoh halaman untuk mengedit data sebuah buku. Anda dapat mengedit field apa pun termasuk primary key ISBN. Tersedia daftar kotak centang untuk mengedit penulis buku.

Membuat Basis Data BookDB

Pertama-tama, kita perlu menulis dan menjalankan skrip SQL untuk membuat basis data BookDB, tabel, data, prosedur, dan fungsi.

  • Buka SQL Server Management Studio.
  • Copy skrip di bawah ini, paste ke editor query.
  • Pilih menu: Query| Execute, atau tekan F5 untuk menjalankan skrip di atas.
  • Perhatikan dua fungsi terakhir di atas. Fungsi BookAuthorName memanggil fungsi AuthorOfBook. Komponen AddBook.razor menampilkan daftar kotak centang penulis buku dengan memanggil Task<List<BookAuthorName>> di BookAuthorService.cs yang menggunakan fungsi BookAuthorName. Dengan demikian pengguna dapat memilih satu atau lebih penulis buku dari daftar. Hal yang sama juga berlaku untuk EditBook.razor.

Membuat Proyek Blazor Server

1. Buka Visual Studio 2019, buat proyek Blazor Server bernama BookApp.
2. Hapus lima file yang tidak diperlukan.
3. Hapus baris kode di file terkait yang dihapus.
4. Buat string koneksi basis data.
5. Instal paket Dapper dan Microsoft.EntityFrameworkCore.SqlServer.

Untuk lebih jelasnya silahkan baca artikel sebelumnya di sini.

Berikut ini adalah struktur proyek secara keseluruhan.

File Pendukung Operasi CRUD

Selain skrip SQL di atas, operasi CRUD membutuhkan file entitas, antarmuka, implementasi antarmuka, komponen razor, dan modifikasi kode beberapa file yang ada.

File Entitas

  • Ada enam kelas dalam folder Entities: Author.cs, Book.cs, BookAuthor.cs, Publisher.cs, BookAuthorName.cs, dan BookAuPub.cs,
  • Empat kelas entitas — Author.cs, Book.cs, BookAuthor.cs, dan Publisher.cs — memetakan tabel basis data dengan nama yang sama.
  • Kelas entitas BookAuthorName.cs memetakan dua tabel basis data yang dijoinkan, Author dan BookAuthor.
  • Kelas entitas BookAuPub.cs memetakan empat tabel basis data yang dijoinkan: Book, Publisher, BookAuthor, and Author.

Berikut adalah daftar kodenya.

Author.cs

Book.cs

BookAuthor.cs

Publisher.cs

BookAuthorName.cs

BookAuPub.cs

File Antarmuka

File antarmuka mendeklarasikan metode. Ada lima file antarmuka: IAuthorService.cs, IBookService.cs, IBookAuthorService.cs, IDapperService.cs, dan IPublisherService.cs. File-file tersebut ada di dalam folder Interfaces.

IAuthorService.cs

IBookService.cs

IBookAuthorService.cs

IDapperService.cs

IPublisherService.cs

File Metode

  • File metode mengimplementasikan metode yang dideklarasikan dalam file antarmuka.
  • Ada lima file metode: AuthorService.cs, BookService.cs, BookAuthorService.cs, DapperService.cs, dan PublisherService.cs.
  • Ada juga file AppContext.cs yang berisi informasi dan konfigurasi untuk mengakses basis data.
  • Keenam file tersebut ada di dalam folder Data.

AuthorService.cs

  • AuthorService.csmengimplementasikan metode yang dideklarasikan dalam file IAuthorService.cs.

BookService.cs

  • BookService.cs mengimplementasikan metode yang dideklarasikan dalam file IBookService.cs.

BookAuthorService.cs

  • BookAuthorService.cs mengimplementasikan metode yang dideklarasikan dalam file IBookAuthorService.cs.

DapperService.cs

  • DapperService.cs mengimplementasikan metode yang dideklarasikan dalam file IDapperService.cs.

PublisherService.cs

  • PublisherService.cs mengimplementasikan metode yang dideklarasikan dalam file IPublisherService.cs.

File Komponen *. razor

Ada sembilan file razor di dalam folder Page: AddAuthor.razor, AddBook.razor, AddPublisher.razor,EditAuthor.razor,EditBook.razor, EditPublisher.razor, ListAuthor.razor, ListBook.razor, dan ListPublisher.razor. Kesembilan file razor berisi kode I/O.

AddAuthor.razor

  • Menampilkan halaman untuk menambah data pengarang.
  • Dapat dipanggil dari:
    (1) menu (NavMenu.razor), or
    (2) halaman daftar buku(ListBook.razor)

AddBook.razor

  • Digunakan untuk menambahkan data sebuah buku.
  • Perhatikan teks tebal pada kode di bawah ini. Daftar kotak centang penulis muncul jika dan hanya jika data buku baru telah disimpan.
  • Daftar tersebut terdiri atas tiga kolom. Yang pertama adalah urutan penulis buku, yang kedua adalah kotak centang, dan yang ketiga adalah nama penulis.
  • Perubahan pada kotak centang akan memicu metode CheckChanged pada blok @Code C#. Centang kotak untuk memasukkan penulis buku atau hapus centang untuk mengeluarkannya.

AddPublisher.razor

  • Merupakan komponen halaman untuk menambahkan penulis.
  • Dapat dipanggil dari:
    (1) menu (NavMenu.razor), or
    (2) halaman daftar buku(ListBook.razor)

EditAuthor.razor

  • Komponen halaman untuk menambah data penulis.

EditBook.razor

  • Perhatikan teks tebal pada kode di bawah ini. Kode tersebut untuk menampilkan daftar kotak centang penulis buku.
  • Daftar tersebut terdiri atas tiga kolom. Yang pertama adalah urutan penulis buku, yang kedua adalah kotak centang, dan yang ketiga adalah nama penulis.
  • Perubahan pada kotak centang akan memicu metode CheckChanged di blok @Code C#. Centang kotak untuk menyertakan penulis buku atau hapus centang untuk mengeluarkannya.

EditPublisher.razor

  • Merupakan komponen untuk mengedit data penerbit.

ListAuthor.razor

  • Komponen halaman menampilkan daftar penulis

ListBook.razor

  • Menampilkan daftar buku termasuk penulis dan penerbitnya.

ListPublisher.razor

  • Komponen halaman menampilkan daftar penerbit.

Modifikasi Kode

File NavMenu.razor
Modifikasi kodenya sehingga menjadi seperti berikut.

_Imports.razor
Tambah yang berikut namespace .

Startup.cs
Tambahkan namespace berikut.

Tambahkan layanan berikut .

Mungkin ada cara yang lebih baik untuk mengimplementasikan daftar kotak centang pada operasi CRUD yang melibatkan hubungan M: N (banyak ke banyak). Tolong beritahu saya jika Anda mengetahuinya.

--

--

M. Ramadhan
Telematika

I’m a database designer and developer, childhood in Menggala, living in Palembang.