1

当范围键为空时,我想查询 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; }
}

我做错了什么?

谢谢

4

2 回答 2

3

首先,当您使用查询时,您总是需要在查询中提供哈希,因此它至少需要:

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值,但它会让您在非 RangeKey 属性上插入一个 NULL 值。所以不支持这个用例。

于 2016-06-30T03:22:12.133 回答
1

PocoDynamo 现在支持 .net 核心的价值

于 2018-05-24T22:32:46.983 回答