Separating Entities From Context and Logic Layer in Entity Framework (Part-2)

Posted at : Aug/23/2015
1639 Views | 0 Comments

Setelah memisahkan layer entity object dengan data access layer di posting sebelumnya (Separating Entities From Context and Logic Layer in Entity Framework (Part-1)) kemudian langkah selanjutnya yaitu membuat layer business logic atau repository yang berisi fungsionalitas yang berhubungan dengan entity-entity object yang digunakan.

1. Tambahkan sebuah Class Library Project template ke dalam solution sebelumnya yang sudah dibuat pada posting artikel bagian pertama. Beri nama project tersebut BLL. Hapus file Class1.cs. BLL ini saya singkat dari kepanjangan Business Logic Layer.

2. Tambahkan referensi DAL.dll dan EntityObject.dll ke project.

3. Tambahkan juga referensi EntityFramework.dll dan EntityFramework.SqlServer.dll ke project dengan browse ke folder Debug / Release dari project DAL. Dll tersebut berfungsi untuk parsing kode linq to EF yang terdapat di repository nantinya.

4. Tambahkan folder Interface dan folder Repository ke project BLL.

5. Tambahkan item Interface ke folder Interface dan beri nama IEntityRepository dan ubah kode didalamnya dengan kode berikut ini :

   1: public interface IEntityRepository<T,D>
   2: {
   3:     IQueryable<T> ReadAllData();
   4:     T Find(D Id);
   5:     void Delete(D Id);
   6:     void Update(T entity);
   7: }

Parameter T nantinya akan diganti dengan tipe entity yang akan digunakan (Customer, Order, dll), sedangkan parameter D digunakan sebagai tipe data yang digunakan oleh kolom primary key di entity tersebut yang digunakan untuk pencarian data berdasarkan kolom primary key tersebut. Tentunya anda dapat mengganti nama T dan D dengan nama yang lain.

6. Tambahkan class ke dalam folder Repository dan beri nama CustomerRepository. Ubah kode di dalamnya menjadi seperti berikut ini :

   1: using BLL.Interface;
   2: using EntityObject;
   3: using DAL;
   4:  
   5: namespace BLL.Repository
   6: {
   7:     public class CustomerRepository:IEntityRepository<Customer,string>
   8:     {
   9:  
  10:         NorthwindEntities dbContext = new NorthwindEntities();
  11:  
  12:         public IQueryable<Customer> ReadAllData()
  13:         {
  14:             throw new NotImplementedException();
  15:         }
  16:  
  17:         public Customer Find(string Id)
  18:         {
  19:             throw new NotImplementedException();
  20:         }
  21:  
  22:         public void Delete(string Id)
  23:         {
  24:             throw new NotImplementedException();
  25:         }
  26:  
  27:         public void Update(Customer entity)
  28:         {
  29:             throw new NotImplementedException();
  30:         }
  31:     }
  32: }

Perhatikan penambahan tiga namespace diatas yang digunakan untuk akses member yang terdapat di dalamnya. Class repository ini implemen interface yang merujuk kepada entity Customer (T) dan tipe data string (D). Tipe data string ini digunakan karena tipe data kolom primary key (CustomerID) di entity Customer yaitu berupa string. Jika interface ini di implementasikan kepada entity Order maka tipe data kolom primary key nya yaitu integer.

7. Ubah semua kode prosedur diatas menjadi seperti berikut ini dan Build Solution :

   1: public class CustomerRepository:IEntityRepository<Customer,string>
   2: {
   3:  
   4:     NorthwindEntities dbContext = new NorthwindEntities();
   5:  
   6:     public IQueryable<Customer> ReadAllData()
   7:     {
   8:         return dbContext.Customers;
   9:     }
  10:  
  11:     public Customer Find(string Id)
  12:     {
  13:         var oCustomer = dbContext.Customers.Find(Id);
  14:         return oCustomer;
  15:     }
  16:  
  17:     public void Delete(string Id)
  18:     {
  19:         try
  20:         {
  21:             var oCustomer = this.Find(Id);
  22:             dbContext.Customers.Remove(oCustomer);
  23:             dbContext.SaveChanges();
  24:         }
  25:         catch (Exception ex)
  26:         {
  27:             throw new Exception(ex.Message, ex);
  28:         }
  29:     }
  30:  
  31:     public void Update(Customer entity)
  32:     {
  33:         dbContext.Entry(entity).State = 
  34:             System.Data.Entity.EntityState.Modified;
  35:         try
  36:         {
  37:             dbContext.SaveChanges();
  38:         }
  39:         catch (Exception ex)
  40:         {                
  41:             throw new Exception(ex.Message, ex);
  42:         }
  43:     }
  44: }

Berikut ini adalah struktur akhir dari project BLL :

Langkah selanjutnya yaitu membuat aplikasi yang akses ke BLL tersebut. Aplikasi client yang dibuat disini yaitu Windows Forms, tentunya jenis aplikasi client lainnya dapat digunakan.

8. Tambahkan Windows Forms Application project template ke solution yang sama dan beri nama ClientApp1.

9. Tambahkan referensi ke BLL.dll, EntityObject.dll, EntityFramework.dll, dan EntityFramework.SqlServer.dll ke project windows forms tersebut.

10. Copy element connectionStrings yang terdapat di App.config project DAL ke App.config project windows forms.

11. Tambahkan control Button dan DataGridView ke dalam Form1 di project windows forms dan ketikkan kode berikut ini di event handler button tersebut untuk membaca semua data Customers.

   1: private void btnReadAll_Click(object sender, EventArgs e)
   2: {
   3:     var db = new BLL.Repository.CustomerRepository();
   4:     dataGridView1.DataSource = db.ReadAllData().ToList();
   5: }

Berikut adalah screen shot dari Form1 yang dijalankan :

Untuk penggunaan prosedur lainnya selain ReadAllData silahkan untuk dicoba penggunaannya di form tersebut atau di aplikasi clientnya seperti ASP.NET, WPF, atau WCF, dsb. Selamat mencoba :-)


[Comments]


[Write your comment]

Name (required)

Email (required-will not published)

 
Comment
7518
Input code above below (Case Sensitive) :

ABOUT ME

Rully Yulian MF
Rully Yulian Muhammad Firmansyah | Founder & IT Trainer Native Enterprise | MCT (2008-2019) | MVP (2009-2016) | Xamarin Certified Professional | MTA | MCAD | MCPD | MOS | Bandung, West Java, Indonesia.

[Read More...]

TOP DOWNLOAD

Mapping Hak Akses User Pada MenuStrip Sampai Control Button
downloaded 6982 times

Bagaimana caranya menginstal database ketika deploying sebuah aplikasi?
downloaded 4893 times

Simple Voice Engine Application With Sound Player Class...
downloaded 4045 times

Change Group,Sort Order, Filtering By Date in Crystal Reports
downloaded 3460 times

WinForms DataGrid Paging With SqlDataAdapter
downloaded 2881 times


LINKS

CERTIFICATIONS

Xamarin Certified
MOS 2007
MCT
MCPD
MCTS
MCAD.NET
ASP.NET Brainbench

NATIVE ENTERPRISE

Native Enterprise - IT Training

FOLLOW ME

Youtube  Facebook  Instagram  LinkedIn   Twitter

RSS


NATIVE ENTERPRISE NEWS

© Copyright 2006 - 2024   Rully Yulian MF   All rights reserved.