Tambahan fungsi pada EF dengan SqlBulkCopy

Soeleman 28 Agustus 2017

Tambahan fungsi pada EF dengan SqlBulkCopy

Dalam beberapa situasi, kita di hadapkan dengan keperluan untuk memasukkan data yang cukup besar kedalam database. Sedangkan secara architecture sudah menggunakan Entity Framework. Ada beberapa teknik yang kadang, membuat kita tidak menggunakan Entity Framework sebagai cara untuk berkomunikasi dengan database.

Cara EF

Cara umum Entity Framework untuk memasukkan banyak data dengan add-to-list dan SaveChanges. Entity Framework akan men-generated sql per-item. Walaupun sebetulnya, ada sql yang 'bisa' di genereted oleh Entity Framework untuk meng-optimize ini. Sayang saat ini, provider Entity Framework-nya belum menerapkan hal ini -- mungkin suatu saat. Jadi saat ini, kita bisa 'tweak' dengan DbContextConfiguration.AutoDetectChangesEnabled Property. Cukup memberikan peningkatan untuk operasi seperti ini.

< VB.NET >

alt text

< C# >

alt text

Cara EF + SqlBulkCopy

Untuk Ms SQL Server, sudah disediakan utility untuk tujuan ini. Dalam .Net ini sudah di-wrapper ke dalam SqlBulkCopy Class. Perlu di ingat ini hanya untuk Microsoft SQL Server.

Untuk operasi seperti ini, SqlBulkCopy akan memberikan performa yang cukup berarti. Karena ini diciptakan sebelum adanya Entity Framework, tentu saja tata caranya mengikuti ADO.Net. Untung saja, Entity Framework-pun merupakan extensi dari ADO.Net juga. Jadi apabila dalam aplikasi kita sudah memutuskan menggunakan Entity Framework sebagai cara berbicara dengan RDMS database, maka kita tidak perlu me-maintenance dua atau lebih cara berbicara dengan database. Contohnya untuk Connection String.

Bagaimana menggabungkan Entity Framework dengan SqlBulkCopy?

Kita cukup menghubungkannya object connection dari Entity Framework ke object SqlBuldCopy. Kalau melihat code dibawah, ada method ConvertToDataTable. Fungsi method tersebut adalah meng-convert generic list menjadi datatable. Atau bisa juga di-convert menjadi DataReader. Silahkan dicari method itu di-search engine (google, bing, duckduckgo, dan lainnya), untuk fungsi tersebut. kenapa tidak di sertakan di sini? Ada banyak caranya, jadi pilih sesuai dengan kebutuhan.

< VB.NET >

alt text

< C# >

alt text

Penutup

Entity Framework adalah library untuk membantu kita berbicara dengan database secara umum. Salah satu kerugian kalau kita menggunakan framework yang di design untuk multi-database, banyak fungsi di buat se-generic mungkin, agar provider database lainnya bisa bekerja dengan API dari Entity Framework.

Tapi bukan berarti untuk kebutuhan khusus kita harus tetap menggunakan cara Entity Framework. Cara di tulisan ini bisa jadi salah satu yang bisa di lakukan tanpa harus mengubah frontal terhadap architecture aplikasi.

Referensi

Perhatian! Code yang ditampilkan dalam tulisan ini merupakan ilustrasi dari yang ingin dipaparkan dan bukan production ready code. Sudah banyak kejadian karena asal meng-copy-and-paste tanpa mengerti code yang diambil itu ke dalam production. Selain itu perlu ada tambahan code dan test sebelum siap untuk digunakan secara utuh.