如何使用对象持久性模型在c#中动态更改dynamodb tablename

时间:2017-05-18 08:59:05

标签: c# amazon-dynamodb

我使用的是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)
{
   ....
}

3 个答案:

答案 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)

文档模型的主要类是TableDocumentTable类具有不同的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")  + "-" 
                }));