1

Includeこのクエリを (の代わりに使用して) 使用すると、セッションごとに許可されるリクエスト数 (30) を超えているというエラーが表示されますCustomize

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("applications/2017"); を使用する必要があります。session.Query().Where(x=>x.Id == "applications/2017"); の代わりに

documentStore.Conventions.AllowQueriesOnId = true; を指定することでこのエラーをオフにすることができますが、これは推奨されておらず、下位互換性のためだけに提供されています。

AllowQueriesOnId = trueこれを機能させる唯一の方法だったので、設定する必要がありました。

インクルードが機能しない原因となる最初のクエリで何が間違っていますか?

ちなみに、別の投稿には、彼が使用しなければならなかった同じ問題がありましたCustomize。私はこれを正しく行いたいと思います。

4

1 に答える 1

1

ロードがこれを実行しない理由がわかりません。どのバージョンのレイヴンを使用していますか? これを Raven 2.5 ビルド 2700 でテストしたところ、インクルードによって 1 回のリクエストで情報が返されました。

とにかく、負荷が期待どおりに機能していないため、一連の遅延クエリに切り替えて、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

それが役立つことを願っています。

于 2013-11-25T05:35:26.387 に答える