C#中调用DynamoDB的GetItem()方法报错,求解决方案
问题分析与解决方案
错误原因
从错误提示No overload for method 'GetItem' takes 0 arguments可知,你调用table.GetItem()时没有传入主键参数。DynamoDB是键值型数据库,获取单条Item必须指定主键,这是报错的直接原因。
修正后的代码
要获取指定主键的Item并调用ToJson()方法,代码需补充主键参数,同时明确类型以避免dynamic带来的潜在问题:
public static string Dynamodb() { string region = "us-east-2"; string tableName = "RetailTestData"; var credentials = new BasicAWSCredentials( Environment.GetEnvironmentVariable("awsAccessKeyId"), Environment.GetEnvironmentVariable("awsSecretAccessKey") ); var client = new AmazonDynamoDBClient(credentials, RegionEndpoint.GetBySystemName(region)); var table = Table.LoadTable(client, tableName); // 替换为你的表的主键名称与对应值 // 若为复合主键,需同时传入分区键和排序键,示例:{ { "PartitionKey", "val1" }, { "SortKey", "val2" } } var primaryKey = new Dictionary<string, object> { { "主键字段名", "主键值" } }; Document item = table.GetItem(primaryKey); // 调用ToJson()转换为JSON字符串,空值判断避免主键不存在时抛异常 return item?.ToJson(); }
关键说明
Table.GetItem()的正确重载需要接收主键键值对,单主键传单个键值,复合主键传两个键值Document类型原生支持ToJson()方法,能直接将DynamoDB Item转换为标准JSON,适配你现有代码的JSON处理逻辑- 添加
item?.ToJson()的空值判断,可避免因主键不存在导致的空引用异常
内容的提问来源于stack exchange,提问作者smiles
相关产品推荐
相关产品推荐

