/// <summary> /// Обновление информации о сотруднике /// </summary> /// <param name="id"></param> /// <param name="data"></param> /// <param name="session"></param> public void UpdateOfficer(int id, OfficerDataIn data, string session) { try { using (var _connection = new NpgsqlConnection(MainConnection.GetConnectionString())) { _connection.Open(); var _transaction = _connection.BeginTransaction(); try { var sqlQueryOfficer = string.Format(@"UPDATE {0}officer SET firstname = @firstname, surname = @surname, patronymic = @patronymic, birthdate = @birthdate WHERE id = @id RETURNING ID", MainConnection.GetSQLNamespace()); using (var _postgreCommand = new NpgsqlCommand(sqlQueryOfficer, _connection)) { _postgreCommand.Parameters.AddWithValue("id", id); _postgreCommand.Parameters.AddWithValue("firstname", data.Name); _postgreCommand.Parameters.AddWithValue("surname", Utils.NoNullValue(data.SurName)); _postgreCommand.Parameters.AddWithValue("patronymic", Utils.NoNullValue(data.Patronymic)); _postgreCommand.Parameters.AddWithValue("birthdate", data.BirthDate); _postgreCommand.ExecuteNonQuery(); } DeleteLink(id, session, _connection); if (data.Posts != null && data.Posts.Count() > 0) { foreach (var post in data.Posts) { CreateOfficerPost(id, post.ID, session, _connection); } } _transaction.Commit(); } catch (Exception e) { _transaction.Rollback(); throw; } } } catch (Exception e) { throw new Exception("Ошибка обновления данных сотрудника в БД.", e); } if (_setting.Value.ChachedEmployee) { try { _cache.EditOfficer(id, data, session); } catch (Exception e) { // Логгирование ошибки, работа продолжится через БД // Необходимо изменить состояние кэша не невалидное, чтобы избежать чтение из неверного кэша //throw new Exception("Ошибка обновления данных сотрудника в кэше.", e); } } }