我是关于dynamodb的新手。我关注http://www.rkconsulting.com/blog/persistence-model-framework-with-aws-dynamodb 在dynamodb中连接和CRUD操作的分步教程,它的工作正常。
在该教程中,他们使用地图类属性的属性映射
[DynamoDBTable("Dinosaur")]
public class Dinosaur
{
[DynamoDBHashKey]
public string Id { get; set; }
[DynamoDBProperty(AttributeName = "Name")]
public string Name { get; set; }
[DynamoDBProperty(AttributeName = "HeightMetres")]
public double HeightMetres { get; set; }
[DynamoDBProperty(AttributeName = "WeightKG")]
public double WeightKg { get; set; }
[DynamoDBProperty(AttributeName = "Age")]
public int Age { get; set; }
[DynamoDBProperty(AttributeName = "Characteristics")]
public List<string> Characteristics { get; set; }
[DynamoDBProperty(AttributeName = "Photo", Converter = typeof(ImageConverter))]
public Image Photo { get; set; }
[DynamoDBIgnore]
public int IgnoreMe { get; set; }
}
我的问题是有没有办法在不使用属性的情况下映射类属性?
类似public class Employee
{
[BsonRepresentation(BsonType.ObjectId)]
public string Id { get; set; }
}
我们可以用这种方式在一个单独的类
中写这个BsonClassMap.RegisterClassMap<Employee>(cm => {
cm.AutoMap();
cm.IdMemberMap.SetRepresentation(BsonType.ObjectId);
});
在dynamodb中有可能吗?
答案 0 :(得分:2)
在最新版本的.NET SDK中,您不必放入属性标记,它将看到所有读/写属性并将属性作为相同的名称上传。如果希望DynamoDB中的属性名称不是.NET对象名,则只需使用[DynamoDBProperty(...)]。
因此,在您的情况下,您可以简单地删除除照片之外的所有属性的该属性(需要转换器,您可以删除它的AttributeName部分)和WeightKg(因为大小写不同),您将获得相同的结果。
我现在看到这是一个有点旧的问题,所以在旧版本中可能没有那种方式(不确定),但我使用的是3.3.0.0的SDK,它确实有效。你可能已经继续前进,但正在回答可能遇到这个问题的其他人...
答案 1 :(得分:1)
没有办法,默认&#34;强类型&#34;客户依赖于属性。
如果你有时间亲自进行管道工作,那么就没有什么可以阻止你自己实现POC到Dynamo的映射了。 Amazon客户端api(AWSSDK.DynamoDBv2)公开处理所有API调用的原始类AmazonDynamoDBClient
,而DynamoDBConext
只是IDynamoDBContext
接口的实现 - 它强烈暴露所有&#34;键入&#34;操作。因此,您可以自己实现并采用不同的映射方法。
您还可以为此提出功能请求: https://github.com/aws/aws-sdk-net/issues