public override bool UpdateData(int userId, int id, ref object dtoItem, out Notification notification)
        {
            DTO.WorkCenterDto workCenter = ((Newtonsoft.Json.Linq.JObject)dtoItem).ToObject <DTO.WorkCenterDto>();

            notification = new Notification()
            {
                Type = NotificationType.Success
            };

            try
            {
                using (var context = CreateContext())
                {
                    DAL.WorkCenter dbItem;

                    if (id == 0)
                    {
                        dbItem = context.WorkCenter.FirstOrDefault(o => o.WorkCenterUD.Equals(workCenter.WorkCenterUD));
                        if (dbItem != null)
                        {
                            notification.Type    = NotificationType.Error;
                            notification.Message = workCenter.WorkCenterUD + " is existed in Work Center!";

                            return(false);
                        }

                        dbItem = new DAL.WorkCenter();
                        context.WorkCenter.Add(dbItem);
                    }
                    else
                    {
                        dbItem = context.WorkCenter.FirstOrDefault(o => o.WorkCenterID == id);

                        if (dbItem == null)
                        {
                            notification.Type    = NotificationType.Error;
                            notification.Message = "Can not found data!";

                            return(false);
                        }
                    }
                    converter.DTO2DB_WorkCenter(userId, workCenter, ref dbItem);

                    context.WorkCenterDetail.Local.Where(o => o.WorkCenter == null).ToList().ForEach(o => context.WorkCenterDetail.Remove(o));

                    context.SaveChanges();
                    dtoItem = GetData(userId, dbItem.WorkCenterID, out notification);
                }

                return(true);
            }
            catch (Exception ex)
            {
                notification.Type    = NotificationType.Error;
                notification.Message = ex.Message;

                return(false);
            }
        }
        public void DTO2DB_WorkCenter(int userID, DTO.WorkCenterDto dtoItem, ref DAL.WorkCenter dbItem)
        {
            // Mapping workcenter.
            AutoMapper.Mapper.Map <DTO.WorkCenterDto, DAL.WorkCenter>(dtoItem, dbItem);

            // Mapping workcenter details.
            if (dtoItem.WorkCenterDetails != null)
            {
                foreach (WorkCenterDetail dbWorkCenterDetail in dbItem.WorkCenterDetail.ToList())
                {
                    if (!dtoItem.WorkCenterDetails.Select(s => s.WorkCenterDetailID).Contains(dbWorkCenterDetail.WorkCenterDetailID))
                    {
                        dbItem.WorkCenterDetail.Remove(dbWorkCenterDetail);
                    }
                }

                foreach (DTO.WorkCenterDetailDTO dtoWorkCenterDetail in dtoItem.WorkCenterDetails.ToList())
                {
                    WorkCenterDetail dbWorkCenterDetail;

                    if (dtoWorkCenterDetail.WorkCenterDetailID < 0)
                    {
                        dbWorkCenterDetail = new WorkCenterDetail();
                        dbItem.WorkCenterDetail.Add(dbWorkCenterDetail);
                    }
                    else
                    {
                        dbWorkCenterDetail = dbItem.WorkCenterDetail.FirstOrDefault(o => o.WorkCenterDetailID == dtoWorkCenterDetail.WorkCenterDetailID);
                    }

                    if (dbWorkCenterDetail != null)
                    {
                        AutoMapper.Mapper.Map <DTO.WorkCenterDetailDTO, WorkCenterDetail>(dtoWorkCenterDetail, dbWorkCenterDetail);

                        dbWorkCenterDetail.UpdatedBy   = userID;
                        dbWorkCenterDetail.UpdatedDate = DateTime.Now;

                        if (dtoWorkCenterDetail.WorkCenterDetailID <= 0)
                        {
                            dbWorkCenterDetail.CreatedBy   = userID;
                            dbWorkCenterDetail.CreatedDate = DateTime.Now;
                        }
                    }
                }
            }
        }