たくさんのデバッグ、いじり、テストを行った後、私はついにこれを理解しました。私の問題は、mongoへの書き込みではなく、一度書き込まれた後のmongoの読み取りにありました。
サイトコアのドキュメントは(いつものように)これの動作のかなり基本的な部分を完全に見逃しているようです。 記載されているドキュメントの詳細 :
わかりました、これは非常に誤解を招く恐れがあります。このEnsureAttribute
とは ファセットのデータをmongoから現在のクラスにロードするようです。 すべてのプロパティに対してこれを行わない場合 あなたのファセットでは、mongoDbからの値は設定されません! これは私の間違いでした。クラスのすべてのプロパティを「保証」していませんでした。
だから何が起こっていたのか、
- データをファセットに入れます
- ファセットデータはセッションに保持され、データを確認したり、アクセスしたり、変更したりすることができます。
- データは最終的にmongoにフラッシュされます(必要な場合はxDb)
- ユーザーが戻ると、システムはそれらを正しく認識します(ユーザーを特定する必要はありません 、
SC_ANALYTICS_GLOBAL_COOKIE
あなたのためにこれを行います) - ただし、データを「保証」しない限り、データはロードされません(mongoからセッションに戻ります)。
したがって、EnsureAttribute
「値型を宣言する」 (これは私の意見では完全に間違っています)mongodbから現在のSession
にデータをロードします 。