MELHORES PRTICAS - .NET CORE

 Tópico anterior Próximo tópico Novo tópico

MELHORES PRTICAS - .NET CORE

C#

 Compartilhe  Compartilhe  Compartilhe
#490776 - 16/10/2019 15:14:43

MICROSOFTP
PORTO FELIZ
Cadast. em:Outubro/2019


Boa tarde, estou comeando meus estudos com webapi com .net core.
Porm, um projeto sem orm (ou seja, direto no banco).

Uso listas para receber dados do banco (por exemplo)
  

public List<Numerador_mdfe> Numerador_Get_id()
        {
            List<DbParameter> parameterList = new List<DbParameter>();
            List<Numerador_mdfe> Numerador_Lista = new List<Numerador_mdfe>();
            Numerador_mdfe Numerador = null;

            string sql = []SELECT top 1 Numerador001,Numerador002,acesso FROM Numerador_mdfe order by Numerador001[];
            using (DbDataReader dataReader = base.GetDataReader(sql,
                                                                parameterList,
                                                                CommandType.Text))
            {
                if (dataReader != null && dataReader.HasRows)
                {
                    while (dataReader.Read())
                    {
                        Numerador = new Numerador_mdfe();
                        Numerador.Numerador001 = (string)dataReader[[]Numerador001[]].ToString().Trim();
                        Numerador.Numerador002 = Convert.ToInt32(dataReader[[]Numerador002[]]);
                        Numerador.acesso = Convert.ToString(dataReader[[]acesso[]].ToString().Trim());
                        Numerador_Lista.Add(Numerador);
                    }
                }
            }
            return Numerador_Lista;
        }


Porm, em uma rotina eu busco a lista:

  
      DAO_Bases Base = new DAO_Bases();
          List<Model.Numerador_mdfe> MDFE_NG;
          MDFE_NG = Base.Numerador_Get_id();


A minha dvida, :
Existe uma forma simples de transformar a lista do tipo  Numerador_mdfe em um objeto Numerador_mdfe?

Ou s fazendo um for each e adicionando?
Ou algum tem uma abordagem melhor, nesse caso?



#490778 - 16/10/2019 16:01:13

KERPLUNK
RIO GRANDE DO SUL
Cadast. em:Junho/2009


Membro da equipe
Sugiro a implementao de um ORM simplificado como o Dapper;

Quanto sua dvida, o que voc est querendo se chama tecnicamente de []mapeamento[] ou Mapping. E mo, no existe uma maneira simples de fazer isso sem loops. A que entra o Dapper, ele faz toda essa parte pra voc de forma muito transparente e simples. Sugiro ao menos tentar usar, com certeza vai ser benfico pra voc. No requer grandes mudanas no seu cdigo, o que j est pronto, fica pronto, mas voc pode usar para coisas novas.

_______________________________________________________________________
Virei Orculo!
The end is nigh, be ready for the nukes!


#490782 - 16/10/2019 16:16:08

MICROSOFTP
PORTO FELIZ
Cadast. em:Outubro/2019


Eu sei, mas, no deixaram usar orm nesse projeto (por motivos que nem vou cair muito nisso, porque no vo mudar).

Eu estava pensando em criar uma rotina genrica que pudesse pegar a lista de um tipo e converte-se em um objeto do mesmo tipo.
Para facilitar cdigo... mas, ainda em estudo de como fazer isso tecnicamente.

Seria vivel?



#490783 - 16/10/2019 16:26:18

KERPLUNK
RIO GRANDE DO SUL
Cadast. em:Junho/2009


Membro da equipe
Bem, eu tenho uma srie de vdeos que voc poderia aproveitar, ele faz mais ou menos isso que voc quer.

Mas realmente no consigo entender a razo de []definitivamente no poder usar[] um ORM.

_______________________________________________________________________
Virei Orculo!
The end is nigh, be ready for the nukes!


#490784 - 16/10/2019 16:47:06

F001E
IBITINGA/SP
Cadast. em:Novembro/2004


Citação:
Sugiro a implementao de um ORM simplificado como o Dapper;


O Dapper voce pode trabalhar com ele tipado ou no tipado. No tipado voce monta os selects na unha do jeito que quer.



Resposta escolhida #490786 - 16/10/2019 18:47:43

FOXMAN
BARRETOS
Cadast. em:Janeiro/2001


Membro da equipe
Citação:
:
Eu sei, mas, no deixaram usar orm nesse projeto (por motivos que nem vou cair muito nisso, porque no vo mudar).

Eu estava pensando em criar uma rotina genrica que pudesse pegar a lista de um tipo e converte-se em um objeto do mesmo tipo.
Para facilitar cdigo... mas, ainda em estudo de como fazer isso tecnicamente.

Seria vivel?


S por curiosidade.
E se vc montar um pequeno ORM no projeto....(ou seja, sem ORM de terceiros. Na verdade um mapper)
Isso eles permitiram ???

Se permitir, da um alo, que lhe auxilio em como fazer algo simples....



Grupo DotNet.Br no FaceBook

Grupo WhatsDev



#490794 - 17/10/2019 08:09:05

MICROSOFTP
PORTO FELIZ
Cadast. em:Outubro/2019


Última edição em 17/10/2019 08:11:59 por MICROSOFTP

Citação:
:
:
Eu sei, mas, no deixaram usar orm nesse projeto (por motivos que nem vou cair muito nisso, porque no vo mudar).

Eu estava pensando em criar uma rotina genrica que pudesse pegar a lista de um tipo e converte-se em um objeto do mesmo tipo.
Para facilitar cdigo... mas, ainda em estudo de como fazer isso tecnicamente.

Seria vivel?

S por curiosidade.
E se vc montar um pequeno ORM no projeto....(ou seja, sem ORM de terceiros. Na verdade um mapper)
Isso eles permitiram ???

Se permitir, da um alo, que lhe auxilio em como fazer algo simples....

Fox, tudo bem?
No sei lhe dizer, tem muita coisa legada aqui e o pessoal meio que no quer mudar como era... eu nem vou ficar discutindo isso, porque isso s me stressa, ento prefiro focar na soluo.

A maneira como montei, meio que funciona como um orm simplificado (Seguindo meio que o padro da casa).
O nico problema mesmo, que eu gostaria de ter um mtodo genrico que convertese uma lista de um tipo e retornasse o obejto desse tipo.
Exemplo: Uma list do tipo []agua[] em um objeto []agua[], []fogo[] em objeto []fogo[]...  e assim vai.

Estou lendo sobre reflection... se conseguir isso, com certeza meus problemas ficam bem mais simples e vou economizar muito cdigo.




#490796 - 17/10/2019 08:51:04

KERPLUNK
RIO GRANDE DO SUL
Cadast. em:Junho/2009


Membro da equipe
Bem, novamente ento sugiro os vdeos do meu canal, incluindo essa parte do Reflection que comea aqui

_______________________________________________________________________
Virei Orculo!
The end is nigh, be ready for the nukes!


#490797 - 17/10/2019 09:14:16

LVFIOROT
SERRA
Cadast. em:Março/2012


Última edição em 17/10/2019 11:01:08 por LVFIOROT

Esse pessoal engraado n!!!
Quer usar novas tecnologias, mas com as []velhas[] formas de programar/pensar....




#490807 - 17/10/2019 13:22:51

FOXMAN
BARRETOS
Cadast. em:Janeiro/2001


Membro da equipe
Citação:
:
:
:
Eu sei, mas, no deixaram usar orm nesse projeto (por motivos que nem vou cair muito nisso, porque no vo mudar).

Eu estava pensando em criar uma rotina genrica que pudesse pegar a lista de um tipo e converte-se em um objeto do mesmo tipo.
Para facilitar cdigo... mas, ainda em estudo de como fazer isso tecnicamente.

Seria vivel?

S por curiosidade.
E se vc montar um pequeno ORM no projeto....(ou seja, sem ORM de terceiros. Na verdade um mapper)
Isso eles permitiram ???

Se permitir, da um alo, que lhe auxilio em como fazer algo simples....

Fox, tudo bem?
No sei lhe dizer, tem muita coisa legada aqui e o pessoal meio que no quer mudar como era... eu nem vou ficar discutindo isso, porque isso s me stressa, ento prefiro focar na soluo.

A maneira como montei, meio que funciona como um orm simplificado (Seguindo meio que o padro da casa).
O nico problema mesmo, que eu gostaria de ter um mtodo genrico que convertese uma lista de um tipo e retornasse o obejto desse tipo.
Exemplo: Uma list do tipo []agua[] em um objeto []agua[], []fogo[] em objeto []fogo[]...  e assim vai.

Estou lendo sobre reflection... se conseguir isso, com certeza meus problemas ficam bem mais simples e vou economizar muito cdigo.


Ento, eu tenho algo semelhante, mas dentro do que citei acima....
Por exemplo...
Tenho um Objeto do tipo PedidosProdutos.
Ao lanar um item, tenho uma funo que busca as informaes do Produto lanado e converte ele em um PedidosProdutos.
Algo como :

PedidosProdutos pp;
pp = Controle.RetornaProduto();


A funo RetornaProduto()...faz basicamente o seguinte :

PedidosProdutos pedidosProdutos = new PedidosProdutos();
            PropertyInfo[] propertyinfos = pedidosProdutos.GetType().GetProperties();
            foreach (var item in propertyinfos)
            {
                MapearAtributo map = item.GetCustomAttribute<MapearAtributo>(true);
                if (map == null)
                {
                    continue;
                }
                var itemAtributos = item.GetCustomAttribute<MapearAtributo>(true).ColunaProduto.ToUpper();
                var produto = Controle.Produto.GetType().GetProperties().FirstOrDefault(p => p.Name.ToUpper() == item.GetCustomAttribute<MapearAtributo>(true).ColunaProduto.ToUpper());
                if (produto != null)
                {
                    if (itemAtributos != null)
                    {
                        if (itemAtributos.ToUpper() == produto.Name.ToUpper())
                        {
                            try
                            {
                                item.SetValue(pedidosProdutos, Convert.ChangeType(Controle.Produto.GetType().GetProperty(produto.Name).GetValue(Produto), item.PropertyType), null);
                            }
                            catch (Exception)
                            {
                                continue;
                            }
                        }
                    }
                }
            }
            return pedidosProdutos;


Dessa forma retorno um objeto do tipo PedidosProdutos, com base em um objeto Produto.
Obviamente, somente retornar os campos cujo os nomes so iguais. E que nesse caso.
Podes ainda fazer uma Heraa de Produtos para PedidosProdutos.

Agora no seu caso, a sua Lista genrica teria que ter dois campos, um identificando o nome da propriedade, e outro o valor.
Tendo isso em mos vc poderia fazer um loop na lista, e ir comparando o nome do campo na lista com o nome da propriedade da classe.
Encontrado semelhana, setaria o valor da propriedade como fiz acima.














Grupo DotNet.Br no FaceBook

Grupo WhatsDev



#490808 - 17/10/2019 13:44:55

KERPLUNK
RIO GRANDE DO SUL
Cadast. em:Junho/2009


Membro da equipe
Citação:
Dessa forma retorno um objeto do tipo PedidosProdutos, com base em um objeto Produto.
Obviamente, somente retornar os campos cujo os nomes so iguais. E que nesse caso.
Podes ainda fazer uma Heraa de Produtos para PedidosProdutos.

Agora no seu caso, a sua Lista genrica teria que ter dois campos, um identificando o nome da propriedade, e outro o valor.
Tendo isso em mos vc poderia fazer um loop na lista, e ir comparando o nome do campo na lista com o nome da propriedade da classe.
Encontrado semelhana, setaria o valor da propriedade como fiz acima.


Bem o que voc fez praticamente fio e pavio o que fao nos meus vdeos. Do jeito que mostro com Reflection, bem genrico, e um nico mtodo funciona para qualquer entidade que esteja corretamente decorada com os atributos.


_______________________________________________________________________
Virei Orculo!
The end is nigh, be ready for the nukes!


 Tópico anterior Próximo tópico Novo tópico


Tópico encerrado, respostas não sao permitidas
Encerrado por MICROSOFTP em 22/10/2019 10:49:57