Skip to main content

Atributos genéricos

Visión general

Los atributos genéricos permiten adjuntar metadatos clave-valor a entidades existentes sin modificar el esquema de la base de datos. Los datos se guardan en la tabla AtributoGenerico, con columnas para la entidad, el grupo de clave, la clave, el valor y la organización.

Mecanismo

La mayoría de las entidades que los usan derivan de EntidadConAtributos, que expone una propiedad AtributosGenericos (una AtributoGenericoColeccion) cargada de forma diferida. La colección se encarga de cargar y persistir los atributos.

Uso

Se trabaja con la colección mediante Obtener / Establecer y luego GuardarCambiosAsync. La conversión de tipos es automática (no hay que serializar a mano):

// entidad deriva de EntidadConAtributos
var atributos = entidad.AtributosGenericos;

var ultimoAcceso = atributos.Obtener<DateTime>("UltimoAcceso");
atributos.Establecer("UltimoAcceso", DateTime.UtcNow);

await atributos.GuardarCambiosAsync();

Otros miembros útiles: RecargarAsync(), IntentarObtenerEntidad(...) e IntentarEstablecer(...).

Soporte multi-organización

Tanto Obtener como Establecer aceptan un organizacionId. Cuando es 0, el valor es neutral respecto a la organización y aplica a todas; con un id concreto, el valor es específico de esa organización (ver Multiorganización).

atributos.Establecer("MiAjuste", "valor", organizacionId: organizacion.Id);

Colecciones tipadas y precarga

Para escenarios frecuentes existen colecciones tipadas, como UsuarioAtributoColeccion, que exponen los atributos de una entidad como propiedades fuertemente tipadas. Para operaciones masivas, IAtributoGenericoServicio permite precargar los atributos de muchas entidades a la vez, reduciendo consultas a la base de datos.

Buenas prácticas

Los atributos genéricos funcionan mejor para metadatos ligeros. Cuando necesites consultar por valor, almacenar contenido grande o modelar relaciones complejas, es preferible crear una entidad dedicada, ya que los atributos no están indexados ni permiten consultas estructuradas.