Entity Framework Part 2

Posted by Kamarudin • 4 minute read • Comments

Melanjutkan postingan sebelumnya, saya sudah mendemokan begitu mudahnya mengakses data di dalam sebuah database menggunakan Entity Framework.

Entity Framework bertugas mengambil alih semua pekerjaan yang biasa kita lakukan dalam pembuatan aplikasi database, seperti mengambil data (SELECT), menambah data (INSERT), mengupdate data (UPDATE) dan menghapus data (DELETE).

Sehingga dengan menggunakan Entity Framework kita sudah tidak lagi berhubungan secara langsung dengan perintah SQL, dan sebagai gantinya kita menggunakan LINQ.

Ketika bekerja dengan Entity Framework ada beberapa pendekatan yang bisa kita lakukan sesuai dengan kebiasaan kita dalam mengembangkan aplikasi.

EF Workflow

Karena saya lebih senang membuat database terlebih dulu, baru dilanjutkan dengan menulis kode, makanya pendekatan yang saya pilih adalah “Code first (existing database)” yaitu membuat class-class entity (model) berdasarkan database yang sudah ada.

Untuk informasi lebih lengkap tentang pendekatan yang bisa kita lakukan ketika bekerja dengan Entity Framework bisa langsung dicek di sini :grin:

Fokus pada postingan kali ini adalah melakukan mapping (pemetaan) antara tabel yang ada di database dengan class entity. Class entity adalah class yang merupakan representatif dari tabel-tabel yang ada di dalam database. Jadi kalo kita mempunyai tabel Supplier, berarti kita juga harus membuat class dengan nama yang sama dengan nama tabelnya.

1

Struktur Tabel Supplier

2

Class Entity Supplier

Mapping (pemetaan) merupakan inti dari ORM seperti Entity Framework. Mapping bisa dilakukan secara manual seperti yang akan kita bahas pada postingan kali ini, maupun secara otomatis menggunakan tools pembantu seperti ADO.NET Entity Data Model Designer dan Entity Framework Power Tools.

Sebagai contoh kita melakukan mapping antara tabel supplier dan class entity supplier seperti gambar di atas. Adapun langkah-langkah seperti berikut :

1. Buat project baru dengan tipe Console Application 2. Tambahkan class baru dengan nama Supplier

3

kemudian lengkapi kodenya seperti berikut :

public class Supplier
{
    public int SupplierID { get; set; }
    public string NamaSupplier { get; set; }
    public string Jalan { get; set; }
    public string Kota { get; set; }
}

Class Supplier di atas merupakan representatif dari tabel Supplier yang ada di dalam database. Setiap objek dari class Supplier akan mewakili satu baris/record tabel Supplier dan setiap field akan dipetakan ke masing-masing property objeknya.

4

3. Menambahkan referensi Entity Framework via NuGet, caranya dengan klik kanan node References kemudian pilih Manage NuGet Packages.

5

selanjutnya akan tampil dialog Manage NuGet Packages kemudian pilih EntityFramework dan klik Install.

6

4. Pilih “I Accept” ketika ada konfirmasi, setelah itu tunggu beberapa detik sampai paket EntityFramework selesai diinstall. Kemudian cek seharusnya library EntityFramework sudah ditambahkan di bagian node References.

7

selain itu ada tambahan file baru yaitu “packages.config” yang berisi informasi paket apa saja yang sudah ditambahkan via NuGet.

8

Konfigurasi Pemetaan (mapping)

Ada dua pilihan ketika kita ingin melakukan mapping :

Data Annotations

Data Annotations adalah atribut yang kita tambahkan secara langsung dibagian class atau properties. Untuk menggunakan Data Annotations kita harus menambahkan namespace System.ComponentModel.DataAnnotations. Contoh :

9

Atribut Tabel hanya ditambahkan jika nama tabel dan class berbeda, begitu juga untuk atribut Column hanya ditambahkan jika nama field berbeda dengan nama property.

Code First’s Fluent API

Jika ingin class entity kita tetap bersih dari atribut-atribut di atas, kita bisa menggunakan Code First’s Fluent API untuk konfigurasi mappingnya.

11

10

Jadi terserah Anda ingin menggunakan cara yang mana untuk konfigurasi mappingnya.

DbContext

Setelah proses mapping selesai, langkah berikutnya adalah menambahkan sebuah class dengan nama RetailContext, class ini harus turunan dari DbContext.

12

Penamaan class RetailContext, disesuaikan dengan nama project yang kita buat. Jika nama project kita adalah SmartLibrary (aplikasi perpustakaan), mungkin penamaan class SmartLibraryContext bisa menjadi pertimbangan untuk nama class Contextnya.

DbContext adalah class yang bertanggung jawab untuk berinteraksi dengan data (yang diambil dari database) yang sudah dirubah bentuknya menjadi objek atau sebaliknya dari objek kemudian dirubah lagi menjadi data yang bisa disimpan ke dalam database.

Berikut adalah kode lengkap untuk class RetailContext di atas :

16

Dibagian constructor ada perintah base(“Name=RetailContext”), penulisan keyword base disini adalah untuk memanggil constructor class induk dari class RetailContext yaitu DbContext. Kemudian “Name=RetailContext”, RetailContext disini adalah nama dari koneksi yang kita set nilainya via file App.config.

17

18

Berikutnya tujuan dari deklarasi property Suppliers dengan tipe DbSet adalah agar class RetailContext bisa mengakses dan memodifikasi objek Supplier.

Percaya atau tidak dengan sedikit konfigurasi di atas, tanpa melibatkan perintah SQL seperti SELECT, kita bisa langsung mengakses data Supplier yang sudah berubah bentuk menjadi objek.

4

Oke langsung saja kita buktikan dengan membuka file Program.cs kemudian kita lengkapi method Mainnya dengan kode berikut :

14

Langkah pertama yang kita lakukan adalah membuat objek dari RetailContext dengan nama db. Karena RetailContext mengimplementasikan interface IDisposable, kita bisa menggunakan keyword using agar objek db langsung dihapus dari memory setelah blok usingnya selesai dijalankan.

Selanjutnya kita membuat objek daftarSupplier untuk menampung data supplier yang di-SELECT dari database kemudian dirubah bentuknya menjadi kumpulan objek dari class entity Supplier yang disimpan di dalam sebuah wadah dengan tipe class collection List.

Terakhir kita gunakan perulangan foreach untuk mengekstrak objek Supplier yang ada di dalam objek daftarSupplier.

Jika kode di atas dijalankan, akan menghasilkan output seperti berikut :

15

Selamat MENCOBA :blush:

Comments