private static object BindToObject(DataRow dr, object entidade) { //Pega as propriedades da entidade PropertyInfo[] classe = entidade.GetType().GetProperties(); foreach (PropertyInfo propriedade in classe) { var associacao = Manipulation.GetAttribute <EntityFromSameQueryAttribute>(propriedade); if (associacao != default(EntityFromSameQueryAttribute)) { propriedade.SetValue(entidade, BindToObject(dr, Activator.CreateInstance(propriedade.PropertyType)), null); } else { string nomeCampo = Manipulation.GetDescription(propriedade); var atributo = Manipulation.GetAttribute <ColumnAttribute>(propriedade) ?? null; if (dr.Table.Columns.Contains(nomeCampo.ToUpper()) && !dr[nomeCampo.ToUpper()].Equals(DBNull.Value)) { if (propriedade.PropertyType.BaseType == typeof(Enum) && atributo != null) { propriedade.SetValue(entidade, Manipulation.Typing(dr[nomeCampo.ToUpper()], propriedade.PropertyType, atributo.DataType), null); } else { propriedade.SetValue(entidade, Manipulation.Typing(dr[nomeCampo.ToUpper()], propriedade.PropertyType), null); } } } } return(entidade); }