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
。私はこれを正しく行いたいと思います。