3 tips para trabajar con tablas del storage de Azure

Trabajar con tablas del storage de Azure es muy sencillo, siempre que tengas claro qué es lo que quieres priorizar (lectura, escritura, …) y que entiendas que sólo podrás filtrar de verdad por las propiedades clave (PartitionKey y RowKey). Sin embargo hay tres detalles que te pueden ayudar a trabajar con las tablas de una manera más sencilla, y a no romperte la cabeza intentando descubrir por qué se produce tal excepción.

1. La entidad “fantasma”
Cuando ejecutas una query sobre una tabla que se acaba de crear pero que en ningún momento ha contenido una entidad, se produce una excepción porque no se conoce el esquema de datos que tienen las entidades de esa tabla. Una forma de no pillarse los dedos y asegurarse de que en ninguna tabla esto es un problema, es insertar una entidad “fantasma” que esté vacía al crear la tabla. De una manera genérica podríamos tener algo así:

if (context == null)
{
context = new BaseContext<TData>(storageAccount, tableName);
       if (tableClient.CreateTableIfNotExist(tableName))
       {
       	//To avoid problems reading before insert the first element
              var entity = new TData();
              context.Insert (entity);
              context.Delete(entity);
        }
}

2. IgnoreMissingProperties
IgnoreMissingProperties es una propiedad que se encuentra en TableServiceContext y por defecto está puesta a falso. Esto provoca que si yo tengo una entidad y le añado una nueva propiedad, al intentar leer una entidad vieja que no tuviese esa propiedad se produzca un error. Si al crear el contexto la ponemos a verdadero, logramos que no se produzca una excepción y que esa propiedad tenga el valor por defecto para su tipo (por ejemplo 0 si es un entero). Esto nos permite añadir nuevas propiedades a las entidades que se guardan en una tabla sin necesidad de preocuparse de actualizar todas las entidades de esa tabla.

3. IgnoreResourceNotFoundException
Al hacer una query contra una tabla, hay varias situaciones por las que se puede obtener un error 404 (Resource not found). Hay que recordar que al final las librerías cliente del storage no son más que un wrapper que envuelve las llamadas Http que se realizan. Uno de estos casos es que la tabla aún no exista, por ejemplo. Para evitar que se produzca una excepción que es más costosa de procesar y controlar directamente el valor devuelto (por ejemplo, mirando si el FirstOrDefault de la query es null), hay que asignar true a la propiedad IgnoreResourceNotFoundException del TableServiceContext.

Estos son mis tres tips básicos para ponerse a trabajar con tablas en el storage de Azure. ¿Y vosotros? ¿Tenéis algún tip que compartir?