Как создать QueryExpression с нулевым полем в PocoDynamo

Я хочу запрос через GSI, когда ключ диапазона равен нулю. У меня есть этот код, но он выбросил исключение

IPocoDynamo dbDynamo = new PocoDynamo(new AmazonDynamoDBClient());
var queryExpression = dbDynamo.FromQueryIndex<IndexName>(x => x.InvalidFrom == (DateTime?)null);
var response = dbDynamo.Query(queryExpression);

Моя модель выглядит так

[References(typeof(IndexName))]
[Alias("TableName")]
public class Child
{
   [AutoIncrement]
   public int ChildId { get; set; }

   public int ParentId { get; set; }
   public string Key { get; set; }
   public DateTime? InvalidFrom { get; set; }
   public decimal Value { get; set; }
}

Это мой индекс

public class IndexName: IGlobalIndex<Child>
{
   [HashKey]
   public int ParentId { get; set; }

   [RangeKey]
   public DateTime? InvalidFrom { get; set; }

   public int ChildId { get; set; }
}

Что я делаю не так?

Спасибо

2 ответа

Решение

Во-первых, когда вы используете запрос, вам всегда нужно указывать хэш в запросе, поэтому для него требуется минимум:

var q = dbDynamo.FromQueryIndex<IndexName>(x => 
    x.ParentId = parentId && x.InvalidFrom == (DateTime?)null);

Но пытаясь вставить элемент без InvalidFrom значение, например:

db.PutItem(new Child { ParentId = 2, Key = "Key2", Value = 2 });

Удастся, когда Child не имеет глобального индекса, но потерпит неудачу, когда IndexName содержащий обнуляемый DateTime? Ключ диапазона с:

Invalid attribute value type

По сути, AWS не позволит вам вставить NULL значение, когда оно определено в ключе диапазона глобального индекса, но оно позволит вам вставить значение NULL в свойство, отличное от Range Key. Так что этот вариант использования не поддерживается.

Для чего стоит PocoDynamo теперь поддерживает ядро ​​.net

Другие вопросы по тегам