gpt4 book ai didi

c# - 如何使用无服务器和 DynamoDBContext 在 dynamodb 中动态设置表名?

转载 作者:行者123 更新时间:2023-11-30 16:39:49 25 4
gpt4 key购买 nike

我们需要能够根据构建环境设置表名。考虑以下类:

[DynamoDBTable("movies")]
public class Movie
{
[DynamoDBHashKey]
public string Title { get; set; }

[DynamoDBRangeKey(AttributeName = "Released")]
public DateTime ReleaseDate { get; set; }

public List<string> Genres { get; set; }
}

serverless.yml中,表名是否可以这样设置:

functions:
update-movies:
environment:
tableName: movies-prod

然后在代码中我们可以根据tableName变量中的表名动态加载表名。我们更喜欢使用 DynamoDBContext 而不是 DynamoDBv2.DocumentModel (这里已经有了解决方案 How do I dynamically change dynamodb tablename in c# using object persistence model )

在 Java 中是这样的: https://medium.com/@onclouds/aws-lambda-use-different-dynamodb-tables-for-different-stages-5eda9f5378b2

最佳答案

通过传递表名前缀找到解决方案:

DynamoDBContextConfig config = new DynamoDBContextConfig()
{
TableNamePrefix = "prod-"
};

_dynamoDBContext = new DynamoDBContext(new AmazonDynamoDBClient(), config);

不过,您仍然需要将表命名为 movies:

[DynamoDBTable("movies")]
public class Movie

DynamoDBContext 将在加载上下文时将前缀添加到表名。因此它将尝试加载 prod-moviesstag-movies

这里是 AWS SDK 内部使用表前缀的地方

if (!string.IsNullOrEmpty(flatConfig.TableNamePrefix))
tableName = flatConfig.TableNamePrefix + tableName;

( https://github.com/aws/aws-sdk-net/blob/b691e46e57a3e24477e6a5fa2e849da44db7002f/sdk/src/Services/DynamoDBv2/Custom/DataModel/ContextInternal.cs )

一些帮助我找到解决方案的引用资料:

https://aws.amazon.com/blogs/developer/enhancements-to-the-dynamodb-sdk/

https://github.com/aws/aws-sdk-net/blob/b691e46e57a3e24477e6a5fa2e849da44db7002f/sdk/test/Services/DynamoDBv2/UnitTests/Custom/DynamoDBTests.cs

关于c# - 如何使用无服务器和 DynamoDBContext 在 dynamodb 中动态设置表名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52419891/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com