如何从类型和值中获取RavenDb Id?

如何从类型和值中获取RavenDb Id?,ravendb,Ravendb,在中,如果传入对象,我可以获取文档Id: string orderId = session.Advanced.GetDocumentId(order); // "orders/1" 但我希望只传入类型和对象的id值,如: string orderId = session.Advanced.GetDocumentId(typeof(Order), 1); // "orders/1" 这有可能吗?如果是,怎么做?我试图避免在删除对象之前将其从数据库中拉出。我正在让RavenDb生成集合名称,因此

在中,如果传入对象,我可以获取文档Id:

string orderId = session.Advanced.GetDocumentId(order); // "orders/1"
但我希望只传入类型和对象的id值,如:

string orderId = session.Advanced.GetDocumentId(typeof(Order), 1); // "orders/1"

这有可能吗?如果是,怎么做?我试图避免在删除对象之前将其从数据库中拉出。我正在让RavenDb生成集合名称,因此我不想对该名称进行任何假设。

您可以使用
FindFullDocumentKeyFromNonSringIdentifier
方法从文档存储的约定中获取此信息

下面是一个简单的扩展方法,可以帮助您:

public static string GetStringIdFor<T>(this IDocumentStore documentStore, int id)
{
    return documentStore.Conventions.FindFullDocumentKeyFromNonStringIdentifier(id, typeof(T), false);
}
公共静态字符串GetStringIdFor(此IDocumentStore documentStore,int id)
{
返回documentStore.Conventions.FindFullDocumentKeyFromNonStringIdentifier(id,typeof(T),false);
}
现在您可以执行以下操作:

string orderId = documentStore.GetStringIdFor<Order>(1);
string orderId=documentStore.GetStringIdFor(1);
或者,如果您在代码中的该点没有访问文档存储的权限,您可以从会话中获取它:

string orderId = session.Advanced.DocumentStore.GetStringIdFor<Order>(1);
string orderId=session.Advanced.DocumentStore.GetStringIdFor(1);