sha*_*whu 6 c# amazon-dynamodb
我正在使用dynamodb 对象持久性模型。
DynamoDBTable("mydynamodbtablename")]
public class mytable
{
....
}
Run Code Online (Sandbox Code Playgroud)
现在的问题是,如果我尝试使表的名称在运行时动态更改(我通过配置文件获取表名称),则会出现错误
var Table_Name = Config.GetTableName();
DynamoDBTable(Table_Name)]
public class mytable
{
....
}
Run Code Online (Sandbox Code Playgroud)
错误:属性参数必须是属性参数类型xxx的常量表达式,typeof表达式或数组创建表达式
有没有一种方法(简便方法),以便我仍然可以使用DDB对象持久性模型并使表名称动态化?
更新:
似乎我没有明确提到ddb持久性模型。这是官方文档 http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/CRUDHighLevelExample1.html
这是一个在实际实践中我们如何使用对象持久性模型的示例
var records = await context.LoadAsync<mytable>(somekey);
foreach(var item in records)
{
....
}
Run Code Online (Sandbox Code Playgroud)
小智 8
使用LoadAsync<T>接受a 的方法的重载DynamoDBOperationConfig:
var config = new DynamoDBOperationConfig
{
OverrideTableName = "MyTableName"
};
var records = await context.LoadAsync<mytable>(somekey, config);
foreach(var item in records)
{
....
}
Run Code Online (Sandbox Code Playgroud)
如果您想对整个应用程序执行此操作(我猜是这样,因为您提到了配置文件),您应该使用 DynamocDBContext 的重载,它采用 DynamoDBContextConfig。例如在 dotnet core 中你会这样做:
services.AddTransient<IDynamoDBContext>(c => new
DynamoDBContext(c.GetService<IAmazonDynamoDB>(),
new DynamoDBContextConfig
{
TableNamePrefix = Configuration.GetValue("MyEnvironment", "unspecified") + "-"
}));
Run Code Online (Sandbox Code Playgroud)
文档模型的主要类是Table和Document。该类Table具有不同的 API 来执行数据库操作(PutItem、GetItem、DeleteItem)
当您使用 API 加载表时LoadTable,您可以设置TableConfig来覆盖表名称值。
public Table LoadTable(
IAmazonDynamoDB ddbClient,
TableConfig config
)
Run Code Online (Sandbox Code Playgroud)
API 接受该TableConfig参数。该类TableConfig具有覆盖表名称的方法。
Amazon.DynamoDBv2.DocumentModel.TableConfig
TableName
Run Code Online (Sandbox Code Playgroud)
例子:-
您可以设置tableNameon tableConfig 对象。
// Set up the Table object
var tableConfig = new TableConfig("tableName");
Table table = Table.LoadTable(client, tableConfig);
Document document = table.GetItem(101); // Primary key 101.
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1587 次 |
| 最近记录: |