我正在尝试使用适用于.NET的AWS开发工具包中的DynamoDBv2库,通过更新请求将DynamoDB文档中的属性设置为空列表。
我尝试了显而易见的更新表达式,但没有成功:
// Fails, expression attribute values cannot contain an empty list ... ExpressionAttributeValues = new Dictionary{ { ":empty", new AttributeValue { L = new List { } } }, }, UpdateExpression = "SET #P.MyList = :empty", ...
我该如何实现?
深入研究AWS开发工具包源代码后,我找到了答案。关键是该IsLSet
属性是可设置的。这将调用以下代码:
public static void SetIsSet(bool isSet, ref List field) { if (isSet) field = new AlwaysSendList (field); else field = new List (); }
在确定是否初始化AttributeValue时,将使用以下代码:
public static bool GetIsSet(List field) { if (field == null) return false; if (field.Count > 0) return true; var sl = field as AlwaysSendList ; if (sl != null) return true; return false; }
这也说明了为什么使用new AttributeValue { L = new List
没有达到预期的效果-当方法Count
为0时,此方法将返回false。但是,AlwaysSendList
如果设置了IsLSet
属性,则对特殊类型的检查将返回true 。
回到您的代码,答案是使用以下命令:
... ExpressionAttributeValues = new Dictionary{ { ":empty", new AttributeValue { IsLSet = true } }, }, UpdateExpression = "SET #P.MyList = :empty", ...