public ProjectChangeLog AddChangeLog(ProjectChangeLog log)
        {
            log.Id         = Guid.NewGuid().ToString();
            log.CreateTime = DateTime.Now;

            ProjectChangeLogs.Add(log);
            SaveChanges();

            UpdateLatestNews(log);

            return(log);
        }
        private void UpdateLatestNews(ProjectChangeLog log)
        {
            ProjectActionType actionType = (ProjectActionType)log.ActionType;

            if (actionType != ProjectActionType.Delete)
            {
                var latestNews = log.CreateTime.ToString("yyyy-MM-dd HH:mm") + " " + log.UserName + log.ActionTypeString;
                latestNews = string.IsNullOrWhiteSpace(log.Message) ? latestNews : latestNews + "," + log.Message;

                switch (actionType)
                {
                case ProjectActionType.EditBudget:
                case ProjectActionType.AddExpenditure:
                case ProjectActionType.DeleteExpenditure:
                    DbContext.Database.ExecuteSqlCommand("Update Projects Set FinanceLatestNews = @p0 Where Id = @p1",
                                                         new SqlParameter {
                        ParameterName = "p0", Value = latestNews
                    },
                                                         new SqlParameter {
                        ParameterName = "p1", Value = log.ProjectId
                    });
                    DbContext.Database.ExecuteSqlCommand("Update ProjectViewStatuses Set FinanceStatus = FinanceStatus + 1, UpdateTime = GETDATE() Where ProjectId = @p0 And UserId <> @p1",
                                                         new SqlParameter {
                        ParameterName = "p0", Value = log.ProjectId
                    },
                                                         new SqlParameter {
                        ParameterName = "p1", Value = log.UserId
                    });
                    break;

                default:
                    DbContext.Database.ExecuteSqlCommand("Update Projects Set LatestNews = @p0, FinanceLatestNews = '' Where Id = @p1",
                                                         new SqlParameter {
                        ParameterName = "p0", Value = latestNews
                    },
                                                         new SqlParameter {
                        ParameterName = "p1", Value = log.ProjectId
                    });

                    DbContext.Database.ExecuteSqlCommand("Update ProjectViewStatuses Set Status = Status + 1, UpdateTime = GETDATE() Where ProjectId = @p0 And UserId <> @p1",
                                                         new SqlParameter {
                        ParameterName = "p0", Value = log.ProjectId
                    },
                                                         new SqlParameter {
                        ParameterName = "p1", Value = log.UserId
                    });
                    break;
                }
            }
        }