2016-06-29 10 views
1

範囲キーがnullの場合、GSIでクエリを実行します。私はこのコードを持っているが、それはPocoDynamoでnullフィールドを持つQueryExpressionを作成する方法

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

例外をスロー私のモデルでは、これは私のインデックス

私が間違っているのは何
public class IndexName: IGlobalIndex<Child> 
{ 
    [HashKey] 
    public int ParentId { get; set; } 

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

    public int ChildId { get; set; } 
} 

あるこの

[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; } 
} 

のように見えますか?クエリを使用する場合

おかげ

答えて

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グローバルインデックスを持っていない場合に成功しますが、それはを持っていると失敗しますでNULL可能DateTime? RANGEキーを含む:

Invalid attribute value type 

基本的にAWSは文句を言わない、それがグローバル索引レンジ・キーに定義されていたときにあなたがNULL値を挿入しましょう、それはあなたが非RangeKeyプロパティにNULL値を挿入できるようになります。したがって、このユースケースはサポートされていません。

関連する問題