【问题标题】:How do I dynamically change dynamodb tablename in c# using object persistence model如何使用对象持久性模型在 C# 中动态更改 dynamodb 表名
【发布时间】:2017-05-18 08:59:04
【问题描述】:

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

【问题讨论】:

    标签: c# amazon-dynamodb


    【解决方案1】:

    使用接受DynamoDBOperationConfigLoadAsync&lt;T&gt; 方法的重载:

    var config = new DynamoDBOperationConfig 
    { 
        OverrideTableName = "MyTableName"
    };
    var records = await context.LoadAsync<mytable>(somekey, config);
    foreach(var item in records)
    {
       ....
    }
    

    【讨论】:

      【解决方案2】:

      如果您想为整个应用程序执行此操作(我猜是因为您提到了配置文件),您应该使用采用 DynamoDBContextConfig 的 DynamocDBContext 的重载。例如在 dotnet core 中你会这样做:

      services.AddTransient<IDynamoDBContext>(c => new 
      DynamoDBContext(c.GetService<IAmazonDynamoDB>(),
                      new DynamoDBContextConfig 
                      { 
                          TableNamePrefix = Configuration.GetValue("MyEnvironment", "unspecified")  + "-" 
                      }));
      

      【讨论】:

        【解决方案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.
        

        【讨论】:

        • 谢谢,但这是文档模型。我了解以下所有事实:1)表类定义是文档模型的一部分,甚至被对象持久性模型使用。 2)我们可以使用文档模型来实现这一点。问题,我如何使用持久性模型?我们的大部分代码都是用持久性模型编写的。谢谢!!
        猜你喜欢
        • 2017-08-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-09-06
        • 1970-01-01
        • 2019-10-30
        • 2017-03-04
        • 1970-01-01
        相关资源
        最近更新 更多