我使用的是dynamodb 对象持久性模型。
DynamoDBTable("mydynamodbtablename")]
public class mytable
{
....
}
现在问题是,如果我试图让表的名称在运行时动态更改(我通过配置文件得到表名),我会收到错误
var Table_Name = Config.GetTableName();
DynamoDBTable(Table_Name)]
public class mytable
{
....
}
错误:属性参数必须是属性参数类型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)
{
....
}
答案 0 :(得分:5)
Use the overload of the LoadAsync<T>
method that accepts a DynamoDBOperationConfig
:
var config = new DynamoDBOperationConfig
{
OverrideTableName = "MyTableName"
};
var records = await context.LoadAsync<mytable>(somekey, config);
foreach(var item in records)
{
....
}
答案 1 :(得分:3)
文档模型的主要类是Table
和Document
。 Table
类具有不同的API来执行数据库操作(PutItem,GetItem,DeleteItem)
使用LoadTable
API加载表格时,可以设置TableConfig
以覆盖表格名称值。
public Table LoadTable(
IAmazonDynamoDB ddbClient,
TableConfig config
)
API接受TableConfig
参数。 TableConfig
类具有覆盖表名的方法。
Amazon.DynamoDBv2.DocumentModel.TableConfig
TableName
示例: - 强>
您可以在tableConfig对象上设置tableName
。
// Set up the Table object
var tableConfig = new TableConfig("tableName");
Table table = Table.LoadTable(client, tableConfig);
Document document = table.GetItem(101); // Primary key 101.
答案 2 :(得分:0)
如果要针对整个应用程序执行此操作(我想是因为提到了配置文件,情况就是如此),则应使用DynamocDBContext重载,该重载需要DynamoDBContextConfig。例如在dotnet核心中,您可以这样做:
services.AddTransient<IDynamoDBContext>(c => new
DynamoDBContext(c.GetService<IAmazonDynamoDB>(),
new DynamoDBContextConfig
{
TableNamePrefix = Configuration.GetValue("MyEnvironment", unspecified") + "-"
}));