예제 #1
0
        /// <summary>
        /// Получить информацию о должностях сотрудника по Id сотрудника
        /// </summary>
        /// <param name="id"></param>
        /// <param name="session"></param>
        /// <returns></returns>
        public List <PostData> GetPostsInfoByOfficerID(int id, string session)
        {
            var result = new List <PostData>();

            try
            {
                using (var _connection = new NpgsqlConnection(MainConnection.GetConnectionString()))
                {
                    _connection.Open();

                    var sqlQuery = string.Format(@"select posts.ID, posts.Namepost, posts.grade
                                                     from {0}Posts posts
                                                     join {0}Officer_to_posts as link ON link.ID_post = posts.ID
                                                    where link.ID_Officer = @id", MainConnection.GetSQLNamespace());

                    using (var _postgreCommand = new NpgsqlCommand(sqlQuery, _connection))
                    {
                        _postgreCommand.Parameters.AddWithValue("id", id);

                        using (var _reader = _postgreCommand.ExecuteReader())
                        {
                            while (_reader.Read())
                            {
                                var post = new PostData();

                                post.ID        = Convert.ToInt32(_reader["ID"]);
                                post.PostsName = _reader["Namepost"].ToString();
                                post.Grade     = Convert.ToInt32(_reader["grade"]);

                                result.Add(post);
                            }
                        }
                    }
                }
            }
            catch (Exception e)
            {
                throw new Exception("Ошибка получения должностей из БД для сотрудника с ID = " + id, e);
            }

            if (_setting.Value.ChachedPosts && result.Count > 0)
            {
                try
                {
                    foreach (var post in result)
                    {
                        _cache.AddPost(post.ID, post, session);
                    }
                }
                catch (Exception e)
                {
                    // Логгирование ошибки, работа продолжится через БД
                    // Необходимо изменить состояние кэша не невалидное, чтобы избежать чтение из неверного кэша
                }
            }

            return(result.Count == 0 ? null : result);
        }