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

时间:2015-04-01 20:17:26

标签: ravendb

RavenDb documentation我可以获取文件ID,如果我传入我的对象:

string orderId = session.Advanced.GetDocumentId(order); // "orders/1"

但我想要的是只传入类型和对象的id值,如:

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

这一切都可能吗?如果是这样,怎么样?我试图避免在删除它之前将对象拉出数据库。我有RavenDb生成集合名称所以我不想对名称做任何假设。

1 个答案:

答案 0 :(得分:3)

您可以使用FindFullDocumentKeyFromNonStringIdentifier方法从文档商店的约定中获取此内容。

这是一个简单的扩展方法,可以提供帮助:

public static string GetStringIdFor<T>(this IDocumentStore documentStore, int id)
{
    return documentStore.Conventions.FindFullDocumentKeyFromNonStringIdentifier(id, typeof(T), false);
}

现在你可以这样做:

string orderId = documentStore.GetStringIdFor<Order>(1);

或者,如果您在代码中没有碰巧访问文档存储区,则可以从会话中获取它:

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