Monday, July 6, 2015

Repository Pattern

 CPS Entities should be replaced by Your Entities.

using System;
using System.Collections.Generic;
using System.Data;
using System.Data.Entity;
using System.Data.Entity.Validation;
using System.Linq;
using System.Text;
using System.Threading.Tasks;


  private readonly CPSEntities context;

        private IDbSet<T> entities;
        string errorMessage = string.Empty;

        public Repository(CPSEntities context)
        {
            this.context = context;
        }

        public T GetById(object id)
        {
            return this.Entities.Find(id);
        }

        public void Insert(T entity)
        {
            try
            {
                if (entity == null)
                {
                    throw new ArgumentNullException("entity");
                }
                this.Entities.Add(entity);
                this.context.SaveChanges();
            }
            catch (DbEntityValidationException dbEx)
            {

                foreach (var validationErrors in dbEx.EntityValidationErrors)
                {
                    foreach (var validationError in validationErrors.ValidationErrors)
                    {
                        errorMessage += string.Format("Property: {0} Error: {1}",
                        validationError.PropertyName, validationError.ErrorMessage) + Environment.NewLine;
                    }
                }
                throw new Exception(errorMessage, dbEx);
            }
        }

        public void Update(T entity)
        {
            try
            {
                if (entity == null)
                {
                    throw new ArgumentNullException("entity");
                }
                this.Entities.Attach(entity);
                context.Entry(entity).State = EntityState.Modified;
                this.context.SaveChanges();
            }
            catch (DbEntityValidationException dbEx)
            {
                foreach (var validationErrors in dbEx.EntityValidationErrors)
                {
                    foreach (var validationError in validationErrors.ValidationErrors)
                    {
                        errorMessage += Environment.NewLine + string.Format("Property: {0} Error: {1}",
                        validationError.PropertyName, validationError.ErrorMessage);
                    }
                }

                throw new Exception(errorMessage, dbEx);
            }
        }

        public void Delete(T entity)
        {
            try
            {
                if (entity == null)
                {
                    throw new ArgumentNullException("entity");
                }

                this.Entities.Remove(entity);
                this.context.SaveChanges();
            }
            catch (DbEntityValidationException dbEx)
            {

                foreach (var validationErrors in dbEx.EntityValidationErrors)
                {
                    foreach (var validationError in validationErrors.ValidationErrors)
                    {
                        errorMessage += Environment.NewLine + string.Format("Property: {0} Error: {1}",
                        validationError.PropertyName, validationError.ErrorMessage);
                    }
                }
                throw new Exception(errorMessage, dbEx);
            }
        }

        public virtual IQueryable<T> Table
        {
            get
            {
                return this.Entities;
            }
        }


        public virtual IQueryable<T> TableWithInclude(string entityToInclude)
        {
            return this.Entities.Include(entityToInclude);
        }

        private IDbSet<T> Entities
        {
            get
            {
                if (entities == null)
                {
                    entities = context.Set<T>();
                }
                return entities;
            }
        }
    }
}

-------
Now you can use it in your service layer:
e.g.

public  interface IDistrictService
    {

        IQueryable<District> GetAllDistricts();
        District GetDistrict(long id);
        void Insert(District district);
        void Update(District district);
        void Delete(District district);
    }

which is implemented in DostrictService Class.

 public class DistrictService : IDistrictService
    {
        private Repository<District> districtRepository;
        private CPSEntities dbContext = new CPSEntities();

        public IQueryable<Model.District> GetAllDistricts()
        {
            districtRepository = new Repository<District>(dbContext);
            return this.districtRepository.Table;
        }
.
.
.
.
.//similarly other methods can be implemented.
 }

Sunday, May 3, 2015

Ajax Action link in MVC 4

 @Ajax.ActionLink(
    "Attachemnts",
        "ShowAttachments",
    "Board",
 new { id = 1 },
    new AjaxOptions
    {
        UpdateTargetId = "result",
        InsertionMode = System.Web.Mvc.Ajax.InsertionMode.Replace,
        HttpMethod = "GET"
    })



On Controller side we need to have Get method which shall return partial view,


 [HttpGet]
        public ActionResult ShowAttachments(int id)
        {
            ViewBag.UserName = HttpContext.User.Identity.Name;
            BoardAttachmentService srvBa = new BoardAttachmentService();
            List<BoardAttachment> baLst = srvBa.GetBoardAttachmentsByBoardId(id).ToList();
            List<BoardAttachmentVM> BoardAttVM = Mapper.Map<List<BoardAttachment>, List<BoardAttachmentVM>>(baLst).ToList();
            return PartialView("_ShowAttachments", BoardAttVM);
        }