我有一个要用于RavenDB中的文档键的类:
public class DocumentKey
{
public string Namespace { get; set; }
public string Id { get; set; }
}
我还实现了ITypeConverter
(不是 .NET 接口,RavenDB 专用接口)将引用类型转换为字符串(因为在数据库中,键实际上都只是字符串)。
最后,我通过通过属性公开的方式ITypeConverter
将IDocumentStore
实现添加到实现中。List<ITypeConverter>
Conventions.IdentityProviders
但是,实现上的LoadAsync<T>
重载签名看起来像这样(为简洁起见,删除了采用多个 id 的签名。此外,与接口上IAsyncDocumentSession
的签名相同):Load
IDocumentSession
LoadAsync<T>(string id);
LoadAsync<T>(ValueType id);
我真的不想为我的键使用值类型,原因如下:
- 我有一个抽象,它对键的类型没有限制。创建单独的结构来反映这一点只是为了拥有值类型是非常不方便的。
- 通过限制为值类型,我无法完全控制类型。值类型有一个默认构造函数,它以我不想在代码中的其他任何地方处理的方式默认值。
如何在 RavenDB 中使用引用类型作为文档键?