RavenDB查询:必须使用Customize()而不是Include()

时间:2013-06-06 23:20:04

标签: ravendb

我收到的错误是,在使用此查询时(使用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时遇到了同样的问题。我想这样做是正确的。

1 个答案:

答案 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

希望有所帮助。