DynamoDB for .net:数据模型中的表名称

时间:2018-08-07 15:59:28

标签: amazon-web-services amazon-dynamodb aws-sdk

我在应用程序中使用Dynamodb.net。

我有以下代码。

var creds = new BasicAWSCredentials(awsId, awsPassword);
var dynamoClient = new AmazonDynamoDBClient(creds, 
awsDynamoDbRegion);
var context = new DynamoDBContext(dynamoClient);
List<ScanCondition> conditions = new List<ScanCondition>();
conditions.Add(new ScanCondition("Id", ScanOperator.Equal, myId));            
var response = await context.ScanAsync<Data>(conditions).GetRemainingAsync();
return response;

我的数据模型为:

[DynamoDBTable("MyTable")]
public class Data
{
     [DynamoDBHashKey]
    public string Id{ get; set; }
    public string Name { get; set; }
 }

我们将模型“ Data”中的表的表名映射为

 [DynamoDBTable("MyTable")]

我们如何不能对此进行硬编码。可以在我自己的实际代码中应用表名,而不是在模型中给出吗?

谢谢

2 个答案:

答案 0 :(得分:2)

您正在寻找OverrideTableName中的DynamoDBOperationConfig吗?

说明:

  

表示要保存对象以覆盖表的属性   为该类型声明了DynamoDBTable属性。

示例:

var x = await DbContext.LoadAsync<T>("hash", new DynamoDBOperationConfig {
    OverrideTableName = "NewTableName",
    IndexName = indexName
});

您正在寻找的可能是DbContext的每个请求的表前缀。它将将此前缀附加到每个表。如果要隔离诸如AppName-MyTable之类的应用程序特定表,则很有用...

示例:

return new DynamoDBContextConfig
{
   TableNamePrefix = "MyAppIdentifier",
   ConsistentRead = false,
};

答案 1 :(得分:0)

另一个选择是通过以下方式为表使用不同的前缀  Amazon.DynamoDBv2.DataModel.DynamoDBContextConfig.TableNamePrefix

  

指示DynamoDBContext为所有表名添加特定字符串前缀的属性。 >如果属性为null或为空,则不使用前缀,并使用默认表名。

     

https://docs.aws.amazon.com/sdkfornet/v3/apidocs/items/DynamoDBv2/TDynamoDBContextConfig.html

例如:

    var credentials = new StoredProfileAWSCredentials("default");
    var client = new AmazonDynamoDBClient(credentials, RegionEndpoint.USEast1);
    var config = new DynamoDBContextConfig{
            TableNamePrefix = "Test."
    };

    var ctx = new DynamoDBContext(client, config);

    await ctx.SaveAsync(item);