使用RavenDB,是否可以在另一个属性中获取属性的ID?例如,如果Foo有一个Bar对象列表,并且每个Bar对象都有一个SnuhId属性,我可以使用一个Include来获取每个Snuh属性的ID吗?
我尝试了下面的查询,但是我得到了一个RavenDB异常:索引超出范围。在此查询中,ApplicationServer是根元素,它具有ApplicationsWithOverrideGroup对象的列表。每个对象都有一个ApplicationId属性。这是我希望在include中获得的ApplicationId。
IEnumerable<ApplicationServer> appServers = QueryAndCacheEtags(session =>
session.Advanced.LuceneQuery<ApplicationServer>()
.Include(x => x.CustomVariableGroupIds)
// This is the line I'm trying to make work:
.Include(x => (from item in x.ApplicationsWithOverrideGroup select item.ApplicationId).ToList())
).Cast<ApplicationServer>();
这些方法中的任何一个都可以正常工作。需要彻底测试。
.Include(x => x.ApplicationsWithOverrideGroup)
或
.Include(x => x.ApplicationsWithOverrideGroup[0].ApplicationId)
如果第一个选项确实有效,那么在Include()中指定的属性将包含其中的ID属性。是吗?
我不确定这两者是否真的有效,但它们似乎是。如果他们都工作,我想知道一个人是否比另一个更好......
好的,那不行。 NumberOfRequests正在增加,我猜这意味着数据库的访问次数正在增加,而不仅仅是会话中的内容。
答案 0 :(得分:0)
好的,这些建议都没有在上面的问题中起作用。我认为必须做的是在根对象中包含嵌套属性的ID。
这就是我所做的,我能够将会话对象上的NumberOfRequests降为1。奇怪的是,我不得不改变这个:
// Not using this, at least for now, because it increased the NumberOfRequests on the session...
appServer.CustomVariableGroups = new ObservableCollection<CustomVariableGroup>(
QueryAndCacheEtags(session => session.Load<CustomVariableGroup>(appServer.CustomVariableGroupIds)).Cast<CustomVariableGroup>());
对此:
// ... however, this kept the NumberOfRequests to just one. Not sure why the difference.
appServer.CustomVariableGroups = new ObservableCollection<CustomVariableGroup>();
foreach (string groupId in appServer.CustomVariableGroupIds)
{
appServer.CustomVariableGroups.Add(QuerySingleResultAndCacheEtag(session => session.Load<CustomVariableGroup>(groupId)) as CustomVariableGroup);
}