Il table storage è l’implementazione, messa a disposizione da Windows Azure, di un datastore NoSQL, ideale per lo storage di dati strutturati, che non necessitano del concetto di “relazionalità”.
Con la nuova versione della “client library” per .Net sono state introdotte diverse feature interessanti. Fra queste la possibilità di interagire con la “pipeline” di serializzazione/deserializzazione di un’entità. Questa possibilità apre scenari che prima di questo rilascio non erano (facilmente) implementabili.
In questo post vedremo come supportare, con poco sforzo, query polimorfiche con il table storage.
In prima battuta, ridefiniamo per la root della nostra gerarchia, il metodo di serializzazione, aggiungendo, oltre all’implementazione “standard” che prevede la serializzazione di tutte le property pubbliche, anche una nuova property “calcolata” che corrisponde al tipo concreto che stiamo persistendo:
…ed ora, innestiamoci effettivamente nella pipeline, con un’implementazione ad-hoc del delegate EntityResolver:
In questo modo possiamo scrivere una query polimorfica, sfruttando il fatto che, prima dell’ “idratazione” delle property della entity, possiamo utilizzare una logica custom (tramite una factory o altro), per la creazione del tipo concreto, ottenendo, con poco sforzo, il risultato cercato: