Entity Framework (EF) yang digunakan dalam sebuah project akan menghasilkan entity class (POCO / Plain Old CLR Object) yang merupakan hasil mapping terhadap tabel atau view atau tipe data yang digunakan dalam sebuah stored procedure. Selain itu juga dihasilkan context class yang berfungsi untuk melakukan koneksi ke sumber data, misalnya database RDBMS. Bagaimana caranya agar entity class yang dihasilkan dapat dipisahkan dari context dan logic layer secara terpisah?
Pemisahan komponen-komponen tersebut berguna agar komponen tersebut reusable dan pengelolaannya juga lebih mudah, sehingga nantinya setiap project yang berbeda dapat menggunakan kembali komponen tersebut.
Dalam contoh kali ini saya akan memberikan langkah-langkah demi langkah untuk melakukan pemisahan tersebut. Database yang digunakan yaitu database Northwind yang sudah terinstal di SQL Server, sedangkan tools yang digunakan yaitu Visual Studio 2013. Berikut ini adalah langkah-langkahnya :
1. Buat sebuah Class Library Project template, dan berikan nama project tersebut DAL. DAL tersebut merupakan singkatan dari Data Access Layer. Kemudian hapus Class1.cs yang terdapat di dalam project tersebut.
2. Tambahkan item ADO.NET Entity Data Model kedalam project tersebut dan berikan nama NorthwindModel. Hubungkan ke database Northwind dan tambahkan tabel Customers, Orders, dan Order Details.

Perhatikan entity / POCO class yang dihasilkan seperti yang dapat dilihat pada gambar diatas yang berada pada kotak merah. Class-class tersebut akan dipisahkan ke project yang berbeda.
3. Tambahkan Class Library Project template baru ke dalam solution yang sama dan berikan nama EntityObject. Hapus file Class1.cs.
4. Buka direktori project DAL, dan cari file NorthwindModel.tt, kemudian cut atau pindahkan file tersebut ke direktori project EntityObject.

5. Buka project EntityObject dan aktifkan fitur “Show All Files” dari toolbar Solution Explorer. Klik file NorthwindModel.tt. Ubah kode berikut ini di file tersebut.

Klik kanan file tersebut dan pilih menu “Include In Project”, kemudian Build Solution. File .tt merupakan file yang dihasilkan secara otomatis oleh tools T4 Template. Perubahan yang dilakukan di kode tersebut ditujukan untuk mengubah rujukan file .edmx ke project DAL. Perhatikan struktur project EntityObject setelah adanya perubahan tersebut :

Entity class sekarang sudah berpindah ke project yang berbeda dari sumber asalnya.
6. Tambahkan referensi dll dari project DAL ke project EntityObject.
7. Buka file NorthwindModel.Context.tt di project DAL. Lakukan perubahan kode berikut ini untuk menambahkan using ke namespace EntityObject dan kemudian Build Project atau Build Solution.

8. Hapus file NorthwindModel.tt di project DAL dengan klik kanan file tersebut dan pilih menu Delete. Build Solution. Sekarang entity class dengan file edmx sudah terpisah di project yang berbeda.
9. Lakukan penambahan tabel di edmx project DAL dengan menambahkan tabel Products, kemudian Build Solution, anda akan mendapatkan pesan error bahwa class Product tidak ditemukan. Perhatikan di project EntityObject, file Product.cs tersebut tidak dihasilkan secara otomatis, kenapa hal tersebut dapat terjadi? Entity class di hasilkan secara otomatis oleh tools T4 Template yang akan dijalankan secara langsung apabila entity class beserta edmx nya masih berada dalam satu project. Apabila sudah dipisahkan maka kita harus melakukannya secara manual untuk menjalankan tools tersebut.
10. Klik kanan file NorthwindModel.tt di project EntityProject dan pilih menu “Run Custom Tool”. Perhatikan kembali struktur projectnya, sekarang dapat kita lihat bahwa class Product sudah dihasilkan oleh tools tersebut.

Jika entity Product tersebut dihapus dari edmx maka kita harus menjalankan kembali custom tool tersebut secara manual, hasil akhirnya dapat dilihat pada gambar dibawah ini :

Pada posting berikutnya saya akan menjelaskan tahap berikutnya untuk membuat logic layer atau repository dengan membuat project yang terpisah yang mengakses kedua project yang sudah dibuat di posting ini. Berikut ini adalah link artikel Part-2 :
Separating Entities From Context and Logic Layer in Entity Framework (Part-2)