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

Entity Framework , Posted at : Aug/23/2015  
784 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

SFCV
Input code above below (Case Sensitive) :
About Me 
Rully Yulian MF
Rully Yulian Muhammad Firmansyah | Microsoft Certified Trainer | IT Trainer at Native Enterprise | IT Consultant | Software Developer | MCAD | MCPD | MOS | Bandung, West Java, Indonesia.
[Read More...]
Top Download 
Mapping Hak Akses User Pada MenuStrip Sampai Control Button : Downloaded 6083 times  
Bagaimana caranya menginstal database ketika deploying sebuah aplikasi? : Downloaded 4689 times  
Simple Voice Engine Application With Sound Player Class... : Downloaded 3554 times  
Change Group,Sort Order, Filtering By Date in Crystal Reports : Downloaded 3324 times  
WinForms DataGrid Paging With SqlDataAdapter : Downloaded 2706 times  
Links 
Certifications 
MOS 2007
MCT
MCPD
MCTS
MCAD.NET
ASP.NET Brainbench
Native Enterprise 
Follow Me 
Facebook   LinkedIn   Twitter
Syndication 
Hosted By 
Native Enterprise News 
© Copyright 2006-2016   Rully Yulian MF   All rights reserved.