我希望在RavenDb数据库中为客户托管许多配置参数,同时在Azure表存储中为这些参数每分钟生成许多数据点。我需要一个基本的方法来连接RavenDb和ATS。显然,这种连接是通过键来完成的。我的问题是RavenDb在其所有Id字段中使用正斜杠,而ATS在PartitionKey或RowKey中使用正斜杠时呕吐。
我的问题如下:是否有可能在我的RavenDb实体(没有设置)中有一个只读Id键。这种键方法将返回预先挂载"entity/"前缀的基于向导的键的值。这样,我就可以在raven实体中存储基于指南的ID键,并能够比较ravenEntity。RootId (guid)到storageEntity。PartitionKey(基于guid的字符串)。我担心,即使我的实体似乎持续到Raven并加载回OK..我可能对一些更模糊的功能有问题?
是否有其他建议或可行的方法来处理这种关系?
所以你只需要RavenDB模型中的一些东西,一旦创建就不会改变,你可以用它来关联你存储在Azure表存储中的相关数据?
好吧,假设您的RavenDB的文档id不会改变(它不能,因为它将是一个不同的文档),您可以使用使用文档id的确定性指南。
public class MyModel
{
public string Id { get; set; }
// Other stuff
[JsonIgnore] // <--- This really doesn't need to be persisted to RavenDB
public string AzureLookupKey
{
get { return "entity/" + Utils.GetDeterministicGuid(this.Id).ToString("n"); }
}
}
GetDeterministicGuid(inputString)
方法可以按照你想要的方式实现,尽管SO问题如何创建确定性指南在问题中有一个很好的例子,在答案中有其他可能性。
除了使用[JsonIgnore]
来防止RavenDB将数据序列化到数据库之外,您还可以使其成为一个方法。