Sunday, January 25, 2015

Repository Pattern - I

 
 
   public class AppDBContext : DbContext
    {
        public AppDBContext()  : base("mycon")
        {
 
        }
 
        public DbSet<Department> Department { getset; }
        public DbSet<Employee> Employee { getset; }
    }
 
 
 
namespace ECart.Core
{
    [Table("Department")]
    public  class Department
    {
        [Key]
        public int DepartmentID { getset; }
        public string DepartmentName { getset; }
 
    }
} 



namespace ECart.Repository
{
    public interface IDepartmentRepository
    {
        IEnumerable<Department> GetAll();
        Department Get(int id);
        Department Add(Department item);
        object Remove(int id);
        bool Update(Department item);
    }
}
 
 
  public class DepartmentRepository : IDepartmentRepository
    {
        private AppDBContext context ; //= new AppDBContext();
        public DepartmentRepository()
        {
            context = new AppDBContext();
        }
 
        public DepartmentRepository(AppDBContext _context)
        {
            context = _context;
        }
 
        public IEnumerable<Department> GetAll()
        {
            return context.Department.ToList();
        }
   } 
 
 
 
 public class DepartmentController : Controller
    {
        private  IDepartmentRepository repository = null;
        public DepartmentController()
        {
            this.repository = new DepartmentRepository();
        }
        public DepartmentController(IDepartmentRepository _repository)
        {
            //if (repository == null)
            //{
            //    throw new ArgumentNullException("repository");
            //}
            this.repository = _repository;
        }
 
 
        public ActionResult Index()
        {
            //return View(db.Department.ToList());
            return View(repository.GetAll().ToList());
        } 
 } 
 
 
 
 //Notice that the DepartmentRepository Class  has two constructor definitions - 
 //one that takes no parameters and 
//the one that accepts the data context instance. 
//This second version will be useful when you wish to pass the context from outside (such as during testing or while using the Unit of Work pattern).
 
 ALSO,
 
//Notice that in DepartmentController, there is a private variable of type IDepartmentRepository at the class level. 
//The parameter less constructor sets this variable to an instance of DepartmentRepository Class, and
//The other version of the constructor accepts an implementation of IDepartmentRepository from the external world and sets it to the private variable.
//This second version is useful during testing where you will supply a mock implementation of Department repository from the test project.
 
 
i.e Repository class will contain reference to the Data Context Class, and,
the Controller will contain the reference to the Repository Class.
 
 

0 comments:

Post a Comment

Twitter Delicious Facebook Digg Stumbleupon Favorites More