Dapper ORM

Bekerja dengan data di platform .NET didominasi oleh ADO.NET selama bertahun-tahun. Dengan hadirnya ORM, banyak framework baru (ORM) yang diciptakan. Sekarang kita akan mengenal Dapper yang merupakan salah satu framework ORM.

Tidak diragukan bahwa Entity Framework +LINQ adalah teknologi luar biasa dalam hal akses basis data. Tetapi setelah sekian lama menggunakan EF, EF terasa lebih memakan waktu untuk setiap pengambilan data dibandingkan dengan menggunakan ADO.NET SqlDataAdapter.

Jika kecepatan penting bagi Anda, tetapi Anda ingin tetap menggunakan data berorientasi objek, maka Anda dapat mempertimbangkan menggunakan Dapper . Seperti Entity Framework, Dapper adalah Object Relation Mapper (ORM) yang memungkinkan Anda untuk mengeluarkan kueri terhadap basis data relasional dan mendapatkan kembali objek. Apa yang menarik tentang Dapper, dibandingkan dengan Entity Framework adalah waktu responsnya setara dengan menggunakan ADO.NET murni.

Apa Itu Dapper ORM?

Dapper mendeskripsikan dirinya sebagai “Micro ORM” karena menyediakan fungsionalitas yang jauh lebih sedikit daripada Entity Framework. Ini masih dianggap sebagai ORM, karena Dapper memungkinkan Anda untuk mengambil objek entitas dari tabel relasional.

Sebagai bagian dari fungsionalitas “micro”, daripada mengharuskan Anda membuat objek konteks seperti yang dilakukan Entity Framework, Dapper berfungsi sebagai sekumpulan metode ekstensi untuk kelas ADO.NET Connection. Lebih jauhnya, Dapper hanya mendukung querying dan updating melalui SQL mentah, tidak mendukung kelas konfigurasi untuk mencocokkan tabel database dan tidak mendukung code-first development.

Oleh karena itu, sudah ada beberapa ekstensi pihak ketiga ke pustaka Dapper, misalnya, mendukung pembaruan berorientasi objek dan pemetaan class-to-table. Tidak menutup kemungkinan suatu hari nanti, sebagian besar fungsi Entity Framework dapat tersedia melalui Dapper.

Keindahan arsitektur Dapper adalah seperti pustaka JavaScript, Anda hanya wajib menambahkan pustaka/fungsionalitas yang Anda butuhkan saja. Kelemahannya adalah Anda harus merakit toolkit Dapper dengan memilih dan memilih di antara ekstensi Dapper.

Baca Juga:  Apa itu NoSQL?

Menggunakan Dapper akan memerlukan penulisan kode sedikit lebih banyak daripada Entity Framework + LINQ. Namun, Anda akan menulis kode lebih sedikit daripada ADO.NET tetapi mendapatkan kinerja seperti ADO.NET.

Menggunakan Dapper

Cara paling sederhana untuk menggunakan Dapper adalah dengan mengirimkan SQL Statement atau Stored Procedure ke metode Query. Metode Query menyematkan dirinya ke kelas apa pun yang mengimplementasikan antarmuka IDBConnection dan harus bekerja dengan salah satu kelas koneksi ADO.NET. Query juga merupakan metode generik: Anda juga harus menentukan kelas pada saat menerima hasil yang dikembalikan akan dipetakan kolomnya.

Contoh dibawah ini menggunakan metode kueri untuk mengambil baris dari tabel Karyawan dan membuat koleksi objek karyawan:

List<Employee> employees;
using (var con = new SqlConnection(strConnection))
{
	employees = con.Query<Employee>("SELECT * FROM Employees");
	foreach (EmployeeBases employee in employees)
		MessageBox.Show(employee.Name);
}

Anda bisa mengirimkan parameter kueri dengan memasukkan parameter dalam SQL Statement Anda (ditandai dengan tanda @, seperti dalam T-SQL). Anda bisa memberikan nilai untuk parameter tersebut melalui objek anonim yang diteruskan sebagai parameter kedua ke metode Query. Objek anonim itu harus memiliki nama properti yang cocok dengan nama parameter yang Anda gunakan dalam kueri dan properti itu harus disetel ke nilai yang ingin Anda gunakan dalam kueri.

Kode dibawah ini, misalnya untuk menemukan karyawan yang memiliki “Fahmi” pada kolom Name:

var employees = con.Query<Employee>("SELECT * FROM Employees WHERE Name LIKE '%' + @Name", new { Name = "Fahmi" });

Anda bisa melewatkan List objek (berguna saat menggunakan operator SQL In), koleksi DynamicParameters Dictionary Dapper (berguna pada saat menggunakan kembali parameter), atau objek DbString Dapper (dapat memberi Anda lebih banyak kontrol atas nilai String). Jika Anda ingin mengirimkan beberapa SQL Statement, Anda dapat menggunakan metode QueryMultiple Dapper.

Baca Juga:  Seberapa Amankah Keamanan Teknologi NFC?

Jika Anda ingin mengambil item pertama dalam sebuah kueri, Anda dapat menggunakan metode QueryFirst untuk mengambil satu objek:

Employee employee;
employee = con.QueryFirst<Employee>("SELECT * FROM Employees WHERE Id = @Id", new { Id = 431 });

Selain itu, Dapper juga menyediakan metode QuerySingle, QueryFirstOrDefault, dan QuerySingleOrDefault untuk mengambil satu objek. Untuk mengirimkan pernyataan SQL Update, Insert dan Delete, Dapper memiliki metode Execute.

Tidak seperti metode di EF, jika Anda ingin mengambil data dari beberapa tabel, Anda harus menulis pernyataan SQL JOIN sendiri. Anda bisa memetakan hasil JOIN ke beberapa kelas dengan memberikan ekspresi lambda ke metode Query yang menjelaskan kolom mana yang akan digunakan, dengan objek mana dan kolom mana yang menandai baris yang termasuk dalam objek “induk” yang sama (biasanya, kolom yang digunakan untuk JOIN dengan tabel lain). Dapper memang lebih banyak menulis kode dibanding EF.

Kesimpulan

Dapper memang lebih cepat dari Entity Framework. Jika performa tinggi menjadi fokus penting, Anda dapat menggunakan Dapper. Namun, jika Anda ingin pengembangan cepat, tidak terlalu banyak kode dan dapat sedikit kompromi pada performa, gunakan Entity Framework sebagai gantinya.