/// <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); }