/// <summary>
        /// Update data in database
        /// </summary>
        /// <param name="trainingJournalDay">data</param>
        /// <returns>updated data</returns>
        public TrainingDay Update(TrainingDay trainingJournalDay)
        {
            if (trainingJournalDay == null || string.IsNullOrWhiteSpace(trainingJournalDay.UserId) ||
                trainingJournalDay.Year == 0 || trainingJournalDay.WeekOfYear == 0 ||
                trainingJournalDay.DayOfWeek < 0 || trainingJournalDay.DayOfWeek > 6 || trainingJournalDay.TrainingDayId == 0)
            {
                return(null);
            }

            var trainingJournalRow = _dbContext.Table <TrainingDayRow>().Where(t => t.UserId == trainingJournalDay.UserId &&
                                                                               t.Year == trainingJournalDay.Year &&
                                                                               t.WeekOfYear == trainingJournalDay.WeekOfYear &&
                                                                               t.DayOfWeek == trainingJournalDay.DayOfWeek &&
                                                                               t.TrainingDayId == trainingJournalDay.TrainingDayId).FirstOrDefault();

            if (trainingJournalRow == null)
            {             // No data in database
                return(Create(trainingJournalDay));
            }
            else
            {                                          //Modify Data in database
                TrainingDayTransformer.ToRow(trainingJournalDay, trainingJournalRow);
                _dbContext.Delete(trainingJournalRow); //Update don't work... need delete and insert
                _dbContext.Insert(trainingJournalRow);
                return(TrainingDayTransformer.ToBean(trainingJournalRow));
            }
        }
        /// <summary>
        /// Update data in database
        /// </summary>
        /// <param name="trainingDay">data</param>
        /// <returns>updated data</returns>
        public TrainingDay Update(TrainingDay trainingDay, TUnitType userUnit)
        {
            if (trainingDay == null || string.IsNullOrWhiteSpace(trainingDay.UserId) ||
                trainingDay.Year == 0 || trainingDay.WeekOfYear == 0 ||
                trainingDay.DayOfWeek < 0 || trainingDay.DayOfWeek > 6 || trainingDay.TrainingDayId == 0)
            {
                return(null);
            }

            var trainingJournalRow = _dbContext.TrainingDay.Where(t => t.UserId == trainingDay.UserId &&
                                                                  t.Year == trainingDay.Year &&
                                                                  t.WeekOfYear == trainingDay.WeekOfYear &&
                                                                  t.DayOfWeek == trainingDay.DayOfWeek &&
                                                                  t.TrainingDayId == trainingDay.TrainingDayId).FirstOrDefault();

            if (trainingJournalRow == null)
            {             // No data in database
                return(Create(trainingDay, userUnit));
            }
            else
            {             //Modify Data in database
                TrainingDayTransformer.ToRow(trainingDay, trainingJournalRow);
                _dbContext.SaveChanges();
                return(TrainingDayTransformer.ToBean(trainingJournalRow, userUnit));
            }
        }
        /// <summary>
        /// Create data in database
        /// </summary>
        /// <param name="trainingJournalDay">Data</param>
        /// <returns>insert data</returns>
        public TrainingDay Create(TrainingDay trainingJournalDay)
        {
            if (trainingJournalDay == null || string.IsNullOrWhiteSpace(trainingJournalDay.UserId) ||
                trainingJournalDay.Year == 0 || trainingJournalDay.WeekOfYear == 0 ||
                trainingJournalDay.DayOfWeek < 0 || trainingJournalDay.DayOfWeek > 6 || trainingJournalDay.TrainingDayId == 0)
            {
                return(null);
            }

            var row = new TrainingDayRow();

            TrainingDayTransformer.ToRow(trainingJournalDay, row);
            _dbContext.Insert(row);
            return(TrainingDayTransformer.ToBean(row));
        }
        /// <summary>
        /// Create data in database
        /// </summary>
        /// <param name="trainingDay">Data</param>
        /// <returns>insert data</returns>
        public TrainingDay Create(TrainingDay trainingDay, TUnitType userUnit)
        {
            if (trainingDay == null || string.IsNullOrWhiteSpace(trainingDay.UserId) ||
                trainingDay.Year == 0 || trainingDay.WeekOfYear == 0 ||
                trainingDay.DayOfWeek < 0 || trainingDay.DayOfWeek > 6 || trainingDay.TrainingDayId == 0)
            {
                return(null);
            }

            var row = new TrainingDayRow();

            TrainingDayTransformer.ToRow(trainingDay, row);
            _dbContext.TrainingDay.Add(row);
            _dbContext.SaveChanges();
            return(TrainingDayTransformer.ToBean(row, userUnit));
        }
        /// <summary>
        /// Find datas
        /// </summary>
        /// <returns></returns>
        public List <TrainingDay> Find(TrainingDayCriteria trainingDayCriteria = null)
        {
            List <TrainingDay>          resultList = null;
            TableQuery <TrainingDayRow> rowList    = _dbContext.Table <TrainingDayRow>();

            CriteriaTransformer.CompleteQuery(ref rowList, trainingDayCriteria);
            rowList = rowList.OrderBy(t => t.DayOfWeek).OrderBy(t => t.BeginHour);

            if (rowList != null && rowList.Count() > 0)
            {
                resultList = new List <TrainingDay>();
                foreach (var trainingJournalDayRow in rowList)
                {
                    resultList.Add(TrainingDayTransformer.ToBean(trainingJournalDayRow));
                }
            }
            return(resultList);
        }
        /// <summary>
        /// Get data in database
        /// </summary>
        /// <param name="key">Primary Key</param>
        /// <returns>read data</returns>
        public TrainingDay Get(TrainingDayKey key, TUnitType userUnit)
        {
            if (key == null || string.IsNullOrWhiteSpace(key.UserId) ||
                key.Year == 0 || key.WeekOfYear == 0 || key.DayOfWeek < 0 || key.DayOfWeek > 6 || key.TrainingDayId == 0)
            {
                return(null);
            }

            var row = _dbContext.TrainingDay.Where(t => t.UserId == key.UserId &&
                                                   t.Year == key.Year &&
                                                   t.WeekOfYear == key.WeekOfYear &&
                                                   t.DayOfWeek == key.DayOfWeek &&
                                                   t.TrainingDayId == key.TrainingDayId).FirstOrDefault();

            if (row != null)
            {
                return(TrainingDayTransformer.ToBean(row, userUnit));
            }
            return(null);
        }
        /// <summary>
        /// Find datas
        /// </summary>
        /// <returns></returns>
        public List <TrainingDay> Find(TUnitType userUnit, TrainingDayCriteria trainingDayCriteria = null)
        {
            List <TrainingDay>          resultList = null;
            IQueryable <TrainingDayRow> rowList    = _dbContext.TrainingDay;

            CriteriaTransformer.CompleteQuery(ref rowList, trainingDayCriteria);
            rowList = rowList.OrderBy(t => t.DayOfWeek).OrderBy(t => t.BeginHour);

            if (rowList != null)
            {
                foreach (var trainingJournalDayRow in rowList)
                {
                    if (resultList == null)
                    {
                        resultList = new List <TrainingDay>();
                    }
                    resultList.Add(TrainingDayTransformer.ToBean(trainingJournalDayRow, userUnit));
                }
            }
            return(resultList);
        }