Download source code 7.86 MB
What does Repository mean?
Dictionary meaning: A place where things may be put for safekeeping.
Repository Pattern:
The Repository Pattern allows to centralise all data access logic in one place. It is a common construct to avoid duplication of data access logic throughout our application. The Repository pattern adds a separation layer between the data and business layers of an application.
Generic Repository Pattern:
A generic(relating to) repository is often used with the ORM(entity framework) to speed up the process of creating a data layer.With generic feature, we can reduce the amount of code we need for common scenarios.
namespace WebApplication1.Repository { interface IRepository: IDisposable where T : class { IEnumerable GetAll(); T GetById(object Id); void Insert(T model); void Update(T model); void Delete(object id); void Save(); } }
Explanation:
interface IRepository
Show an interface of a generic repository of type T, which is a LINQ to SQL entity. It provides a basic interface with operations like Insert, Update, Delete, GetById and GetAll.
IDisposable
The IDisposable Interface, Provides a mechanism for releasing unmanaged resources.
where T : class
where T : class
This is constraining the generic parameter to a class.
The type argument must be a reference type; this applies also to any class, interface, delegate, or array type.
namespace WebApplication1.Repository { public class GenericRepository: IRepository where T : class { Customer_Entities context = null; private DbSet entities = null; public GenericRepository(Customer_Entities context) { this.context = context; entities = context.Set (); } public IEnumerable GetAll() { return this.entities.ToList(); } public T GetById(object id) { return this.entities.Find(id); } public void Insert(T model) { context.Entry(model).State = EntityState.Added; } public void Update(T model) { context.Entry(model).State = EntityState.Modified; } public void Delete(object id) { T existing = this.entities.Find(id); this.entities.Remove(existing); } public void Save() { context.SaveChanges(); } private bool disposed = false; protected virtual void Dispose(bool disposing) { if (!this.disposed) { if (disposing) { context.Dispose(); } } this.disposed = true; } public void Dispose() { Dispose(true); GC.SuppressFinalize(this); } } }
Use of Generic Repository in MVC-Application:
namespace WebApplication1.Controllers { public class HomeController : Controller { private GenericRepositoryCustRepository; public HomeController() { this.CustRepository = new GenericRepository (new Customer_Entities()); } // GET: Home public ActionResult Index() { var test = CustRepository.GetAll(); return View(test); } // GET: Insert public ActionResult Insert() { return View(); } [HttpPost] public ActionResult Insert(Customer model) { if (ModelState.IsValid) { CustRepository.Insert(model); CustRepository.Save(); } return RedirectToAction("Index"); } // GET: Delete public ActionResult Delete(int id) { this.CustRepository.Delete(id); CustRepository.Save(); return RedirectToAction("Index"); } // GET: Update public ActionResult Update(int id) { return View(this.CustRepository.GetById(id)); } [HttpPost] public ActionResult Update(Customer model) { this.CustRepository.Update(model); CustRepository.Save(); return RedirectToAction("Index"); } protected override void Dispose(bool disposing) { base.Dispose(disposing); } } }
Explanation:
private GenericRepositoryCustRepository;
Declaration of GenericRepository reference.
public HomeController() { this.CustRepository = new GenericRepository(new Customer_Entities()); }
In the constructor we initialize the object with GenericRepository class, passing Customer_Entities objct to the constructor as parameter
Hope this will help 🙂
says:
Wonderful explanation on the topic. Keep sharing more articles.
vikash Kumar Mishra says:
but sir if i want to add the Business layer,Data access layer,repository layer with Ado.net entity frame work then how i can do that
Shashangka Shekhar says:
We then separate those classes by creating class libraries then reference it.
Carlos Encarnacion says:
thank you very much, helped me understand.
Shashangka Shekhar says:
You are most welcome, glad that it helps you 🙂
Jess Rubio says:
what if am going to retrieve result if combination of two table. like in LINQ we use join/inner join how could i retrieve it. and modified it?do i have to create another model for the result of two or more table?
Shashangka Shekhar says:
Use dynamic feature in C# 4.0. get more details :
says:
Awesomely written article. Need and clean. Very precious about the topic.