gpt4 book ai didi

c# - 如何在 PocoDynamo 中创建带空字段的 QueryExpression

转载 作者:太空宇宙 更新时间:2023-11-03 21:10:23 24 4
gpt4 key购买 nike

我想在范围键为空时通过 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 没有全局索引时会成功,但当它有包含可为空的 DateTime? Range 的 IndexName 时会失败键:

Invalid attribute value type

本质上,当 AWS 在全局索引范围键上定义时,它不会让您插入 NULL 值,但它会让您在非 RangeKey 属性上插入 NULL 值。因此不支持此用例。

关于c# - 如何在 PocoDynamo 中创建带空字段的 QueryExpression,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38110152/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com