Rellenando entidades

28/03/2007 - 10:54 por AE | Informe spam
Hola a todos,

les pongo en situación. Tengo una aplicación , en este caso, en 3 capas. Y
en la capa de acceso a datos se "rellenan" entidades a partir de los valores
de una consulta. Algo así tengo en un método ObtenerListaTareas(..) :

...
ListaTareasWorkflow listaTareas = new ListaTareasWorkflow();
DataReaderHelper drh = new DataReaderHelper(dataReader);
int indice = 0;
while (drh.Read())
{
indice++;

// Rellenar Entidad
TareaWorkflow entidad = new TareaWorkflow();

entidad.Idtareasworkflow = drh.GetInt32NoNulo("idtareasworkflow");
entidad.Tipotarea = drh.GetShortNulo("tipotarea");
entidad.Prioridad = drh.GetShortNulo("prioridad");
// ... mas campos

listaTareas.Añadir(indice, entidad);
}
return listaTareas;

En la capa de acceso a datos hay varios métodos ObtenerXXX que rellenan la
entidad antes citada (todos los campos, o parte de ellos). Por lotanto se
repite código en varios métods.

Existe alguna manera de mejorar esta situación ? Alguna clase útil o
referencia que dispongan ustede para facilitar este "relleno de datos" de la
entidad.

Entiendo que la problemática sería el nombre de los campos o alias que
aparecen en la consulta, pero suponiendo que se utilizan los mismos para
todas las consultas, cuál sería una forma genérica de rellenar una entidad ?

Saludos y gracias de antemano.
 

Leer las respuestas

#1 Alberto Poblacion
28/03/2007 - 13:10 | Informe spam
"AE" wrote in message
news:
Entiendo que la problemática sería el nombre de los campos o alias que
aparecen en la consulta, pero suponiendo que se utilizan los mismos para
todas las consultas, cuál sería una forma genérica de rellenar una entidad
?



Una forma de hacerlo es utlizar Reflexion sobre la entidad para enumerar
todas las propiedades públicas, y a continuación buscar por nombre esas
propiedades como campos del DataReader. Los Tipos se pueden obtener también
por reflexión. La reflexión no es muy rápida, pero comparada con el coste de
buscar los datos en la base de datos, el coste de la reflexión es muy
pequeño.
Esto solo funciona si se tiene cuidado de que los nombres de campos
seleccionados en la consulta sean los mismos que se utilizan para nombrar
las propiedades en el código fuente.

Preguntas similares