AWS sdk для метода .net queryAsync, использующего глобальный вторичный индекс, не работает

Ниже приведен метод, который я использовал для получения сведений из таблицы Dynamodb. Но когда я вызываю этот метод, он генерирует исключение «Невозможно найти свойство для ключевого атрибута assignId». первичный ключ этой конкретной таблицы - assignId, но я уже создал глобальный вторичный индекс для столбца PatientId. Я использую этот индекс в запросе ниже, чтобы получить сведения о встрече по заданному идентификатору пациента.

public async Task GetAppointmentByPatientID(int patientID)
        {
            var context = CommonUtils.Instance.DynamoDBContext;


            PatientAppointmentObjectList.Clear();


            DynamoDBOperationConfig config = new DynamoDBOperationConfig();
            config.IndexName = DBConstants.APPOINTMENT_PATIENTID_GSI;
            AsyncSearch<ScheduledAppointment> appQuery = context.QueryAsync<ScheduledAppointment>(patientID.ToString(), config);
            IEnumerable<ScheduledAppointment> appList = await appQuery.GetRemainingAsync();

            appList.Distinct().ToList().ForEach(i => PatientAppointmentObjectList.Add(i));

            if (PropertyChanged != null)
                this.OnPropertyChanged("PatientAppointmentObjectList");
        }
    }

person Asanga Dewaguru    schedule 12.08.2015    source источник
comment
какое имя индекса в вашем запросе? Вы создаете дополнительный индекс или это просто имя вашей базы данных?   -  person Emil    schedule 17.12.2016


Ответы (1)


Это была глупая ошибка. У меня был ключевой столбец таблицы как «assignID», а свойство объекта модели - как AppointmentID. Несоответствие в случае имени свойства запутало отображение Dynamodb.

person Asanga Dewaguru    schedule 12.08.2015
comment
Для правильной работы клиента Dynamo регистр имен свойств должен точно совпадать. Они должны написать это большими жирными буквами вверху документации. - person Jordan Wilcken; 04.05.2018
comment
Хотел добавить, что, если вам требуется конкретное именование в DynamoDB, но вы хотите использовать другой корпус, например паскаль, как мы обычно делаем для свойств, вы можете использовать [DynamoDBProperty("year")], [DynamoDBHashKey("title")] и т. Д. Над своим свойством с именем Year, Title и т. Д. - person tkauran; 18.07.2021