在 RavenDB 中使用 URL 作为键的最佳方式是什么?
不幸的是,更新项目的语义在文档中并不清楚:如果键以反斜杠结尾,它总是一个插入,否则如果键已经存在,它可能是一个更新。
但是URL 可以以斜线结尾,而RavenDB 使用终止斜线来生成密钥
RavenDB 还支持身份的概念,例如,如果您需要连续的 ID。通过在实体中创建字符串 Id 属性,并将其设置为以斜杠 (/) 结尾的值,您可以告诉 RavenDB 将其用作实体的键前缀。在您调用 SaveChanges() 后,该前缀后跟下一个可用的整数 ID 将是您的实体 ID。并且该正斜杠无法重新配置。所以它并没有真正“支持”它,而是强制执行它。
编辑:同一个 RavenDB 文档页面说明了以下内容,这与观察到的行为不对应:
您可以为文档分配您可以想象的任何 ID。一切都会正常工作,但是您必须注意,当具有自定义生成 ID 的文档数量非常多(数百万个文档)时,某些类型的 ID 可能会导致性能问题。
选项包括: 1. 修改您的 url 以删除结尾斜杠 2. Url 对 url 进行编码(如 RavenDB 维护人员所建议的那样) 3. 修改架构并使用数据库生成的 ID
在大多数情况下,选项 1 应该是安全的。选项 2 会使密钥不可读,而且我还没有设法使其工作(可能是 RavenDB 或我的代码中的错误)。选项 3 似乎不必要地使架构复杂化。
一般来说,最好的行动方案是什么?