Depois de muito depurar, mexer e testar, finalmente descobri isso. Meu problema, ao que parece, não era escrever para o mongo, estava na leitura de volta do mongo depois de escrito.
A documentação do sitecore parece (como sempre) perder completamente uma parte fundamental do funcionamento disso. Cerca de um terço dos nos documentos que indica :
Ok, isso é muito enganoso. O que este
EnsureAttribute
parece fazer é carregar os dados da faceta na classe atual do mongo. Se você não fizer isso para todas as propriedades na sua faceta, ele não define o valor do mongoDb! Este foi o meu erro, eu não tinha "garantido" todas as propriedades da classe. Então o que estava acontecendo é,
- Coloquei meus dados no atributo
- os dados da faceta persistem na Sessão e posso ver, acessá-los, alterá-los etc.
- Os dados são eventualmente liberados para o mongo (xDb, se necessário)
- o usuário retorna, o sistema os reconhece corretamente (não há necessidade de identificar o usuário , o
SC_ANALYTICS_GLOBAL_COOKIE
faz isso por você) - Mas ele não carrega os dados (fora do mongo e volta para a sessão), a menos que você "garanta" isso.
Portanto, o
EnsureAttribute
não "declara um tipo de valor" (isso é totalmente errado na minha opinião) ele carrega os dados do mongodb para a Session
atual .