我收到的错误是,在使用此查询时(使用Include
代替Customize
),我超过了每个会话允许的请求数(30):
ApplicationServer appServer = QuerySingleResultAndSetEtag(session => session
.Include<ApplicationServer>(x => x.CustomVariableGroupIds)
.Include<ApplicationServer>(x => x.ApplicationIdsForAllAppWithGroups)
.Include<ApplicationServer>(x => x.CustomVariableGroupIdsForAllAppWithGroups)
.Include<ApplicationServer>(x => x.CustomVariableGroupIdsForGroupsWithinApps)
.Include<ApplicationServer>(x => x.InstallationEnvironmentId)
.Load <ApplicationServer>(id))
as ApplicationServer;
注意,此行发生错误,为应用程序中的每个AppWithGroup调用:
appGroup.Application = QuerySingleResultAndSetEtag(session =>
session.Load<Application>(appGroup.ApplicationId)) as Application;
但是,此查询(使用Customize
)不会创建额外请求:
ApplicationServer appServer = QuerySingleResultAndSetEtag(session =>
session.Query<ApplicationServer>()
.Customize(x => x.Include<ApplicationServer>(y => y.CustomVariableGroupIds))
.Customize(x => x.Include<ApplicationServer>(y => y.ApplicationIdsForAllAppWithGroups))
.Customize(x => x.Include<ApplicationServer>(y => y.CustomVariableGroupIdsForAllAppWithGroups))
.Customize(x => x.Include<ApplicationServer>(y => y.CustomVariableGroupIdsForGroupsWithinApps))
.Customize(x => x.Include<ApplicationServer>(y => y.InstallationEnvironmentId))
.Where(server => server.Id == id).FirstOrDefault())
as ApplicationServer;
但是,上述查询会导致错误:
仅阻止尝试按ID查询,您应该使用call session.Load( “应用/ 2017”);代替 session.Query()。Where(x =&gt; x.Id ==“applications / 2017”);
您可以通过指定关闭此错误 documentStore.Conventions.AllowQueriesOnId = true;,但事实并非如此 仅出于向后兼容性原因推荐和提供。
我必须设置AllowQueriesOnId = true
,因为这是我能让它工作的唯一方法。
我在第一个查询中做错了什么导致包含不起作用?
顺便说一下,another post在他必须使用Customize
时遇到了同样的问题。我想这样做是正确的。
答案 0 :(得分:1)
我不确定为什么负载没有为你做这个,你在用什么版本的乌鸦?我刚刚在Raven 2.5 build 2700中对此进行了测试,并且include会在一次请求中为我提供信息。
无论如何,由于负载不能像我期望的那样工作,我会切换到一组懒惰的查询,以便在2次服务器往返中获得你想要的东西。 http://ravendb.net/docs/2.5/client-api/querying/lazy-operations。
另一个可能更适合您的选项(取决于您对所有数据的实际操作)是变换器。 http://ravendb.net/docs/2.5/client-api/querying/results-transformation/result-transformers?version=2.5
希望有所帮助。