如何在 PocoDynamo 中创建带空字段的 QueryExpression
How create a QueryExpression with null field in 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; }
}
我做错了什么?
谢谢
首先,当您使用查询时,您总是需要在查询中提供哈希,因此至少需要:
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 值。因此不支持此用例。
为什么 PocoDynamo 现在支持 .net 核心
我想在范围键为空时通过 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; }
}
我做错了什么?
谢谢
首先,当您使用查询时,您总是需要在查询中提供哈希,因此至少需要:
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 值。因此不支持此用例。
为什么 PocoDynamo 现在支持 .net 核心