RavenDb文档指出:
支持数字或 Guid Id 属性并将无缝工作。在这种情况下,RavenDB 会自动将内部字符串 ID 转换为实体中显示的数字或 Guid 值并返回。
我存储了以下对象:
class A
{
public Guid Id { get; set; }
public Guid BId { get; set; }
}
class B
{
public Guid Id { get; set; }
public string Name { get; set; }
}
然后我创建了以下投影:
class AB
{
public Guid Id { get; set; } // This should be the Id of A
public Guid BId { get; set; } // This should be the Id of B
public string BName { get; set; } // This should be the name of B
}
我创建了以下索引来创建投影:
class MyIndex : AbstractIndexCreationTask<AB>
{
public MyIndex()
{
Map = docs =>
from d in docs
select new
{
d.Id,
d.BId,
BName = string.Empty
};
TransformResults = (database, results) =>
from r in results
let b = database.Load<B>("bs/" + r.BId.ToString())
select new
{
r.Id,
r.BId,
BName = b.Name
};
}
}
当我使用以下查询时:
session.Query<AB, MyIndex>().FirstOrDefault(t => t.Id == guid);
我得到这个例外:
将值“bs/cc0a65ae-dd36-4437-8a57-fa20b91eeef7”转换为类型“System.Guid”时出错。路径“标识”。
问题:
这是由我的投影中的转换引起的,因为
Id
那里是一个字符串,而不是我的 Guid。但是,将其省略不会返回 Id。我必须做什么?我必须使用字符串构建
"bs/" + r.BId.ToString()
来加载相关文档。有没有办法不必这样做?是否有某种功能可以为我解析 doc 标签?有没有一种通用的方法可以完全去除文档标签?
我的约束。
我将生成 Guid,不能让 RavenDb 为我生成它。我知道实际的文档 ID 是字符串,但我确实需要使用我创建的 Guid。我更愿意拥有Id
我的实体的财产。
我正在使用 Raven.Client 1.0.972