Unity C#环境下DynamoDB动态设置表名与CS0103报错解决问询
问题原因
你存在两个核心错误:
- C# 特性(Attribute)的参数必须是编译期常量,不能传入运行时才确定的变量,也不支持传入
DynamoDBOperationConfig类型的对象,[DynamoDBTable]特性本身只接受字符串类型的固定表名参数,你的写法本身不符合C#语法规则。 S_tablefieldset是类的实例字段,类特性加载时类还未实例化,自然找不到该变量,这就是你收到CS0103报错的直接原因。
正确实现方案
DynamoDBOperationConfig.OverrideTableName的设计初衷就是在运行时覆盖类特性上标注的固定表名,完全不需要修改类上的[DynamoDBTable]特性,按以下步骤操作即可:
- 保留类上的
[DynamoDBTable]特性,填任意默认表名即可
// 此处填写任意默认表名,运行时会被覆盖 [DynamoDBTable("mydynamodbtablename")] public class HighLevelTableExample : DynamoDbBaseExample { public string S_tablefieldset; // 其余类代码保持不变 }
- 你的
GetDynamoDbOperationConfig静态方法无需修改,在实际执行DynamoDB读写操作时,将生成的配置作为参数传入对应的操作方法即可:
// 运行时给动态表名赋值 S_tablefieldset = "your_runtime_dynamic_table_name"; // 生成自定义操作配置 var config = GetDynamoDbOperationConfig(S_tablefieldset); // 初始化DynamoDB上下文(yourAmazonDynamoDBClient为你初始化好的DynamoDB客户端实例) var dbContext = new DynamoDBContext(yourAmazonDynamoDBClient); // 示例1:查询操作,传入config即可自动覆盖表名 var queryResult = await dbContext.LoadAsync<HighLevelTableExample>(yourHashKey, config); // 示例2:写入操作 await dbContext.SaveAsync(yourDataObject, config); // 其余Delete、Scan、Query等操作均支持传入该配置参数
内容的提问来源于stack exchange,提问作者karthik keyan
相关产品推荐
相关产品推荐

