TRABALHAR DADOS COM DAPPER

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

TRABALHAR DADOS COM DAPPER

VB.NET

 Compartilhe  Compartilhe  Compartilhe
#497065 - 27/05/2021 15:09:57

NOWLIGHTS
SUMARE
Cadast. em:Abril/2011


Última edição em 27/05/2021 15:10:26 por NOWLIGHTS

Boa tarde,

Como faço para preencher uma coluna de uma propriedade ao qual não tem relação com banco de dados, ex.:

classe;

Id
Nome
Resultado

banco de dados
Id
Nome

quando usar o dapper, quero fazer uma conta e setar na propriedade Resultado... a unica alternativa, seria percorrer a lista que o dapper retornar??


__________________________________
- Everyone has a chance


Resposta escolhida #497068 - 27/05/2021 15:41:22

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


Membro da equipe

Última edição em 27/05/2021 16:01:38 por KERPLUNK

Poderia criar uma classe auxiliar contendo a propriedade que quer à mais, você poderia criar um operador explícito ou implícito.


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


#497069 - 27/05/2021 15:57:58

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


Membro da equipe
Fica mais ou menos assim

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


#497070 - 27/05/2021 16:43:41

NOWLIGHTS
SUMARE
Cadast. em:Abril/2011


Última edição em 27/05/2021 16:48:06 por NOWLIGHTS

No caso eu necessariamente preciso de duas classes? não consigo fazer o operador dela mesma?

Porque a duvida de fazer isso é a seguinte, estou estudando asp.net core e o uso de tags acionando um controller passando o Id na tag, é facilmente alterada pelo usuário, e com isso, precisso passar o id criptografado, segundo Macorrati, consigo esse resultado usando IDataProtectionProvide, porém, pelo que entendi, eu preciso percorrer a lista dos clientes buscados, criptografar id por id e então montar a view, imaginei que conseguisse essa 'façanha' direto pelo dapper, e acredito que não de para fazer a criptografia na tela do usuario (client side)


__________________________________
- Everyone has a chance


#497072 - 27/05/2021 17:19:06

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


Membro da equipe
Aí complica... nem sei se entendi o que quer.

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


#497073 - 27/05/2021 17:25:55

NOWLIGHTS
SUMARE
Cadast. em:Abril/2011


Última edição em 27/05/2021 17:27:12 por NOWLIGHTS

Ao buscar no dados uma Lista de clientes List<Cliente> eu preciso montar a view, e em nas tags <a> onde chama uma action e é passado o id (<a asp-action='deletar_cliente' asp-route-IdCliente='@Model.IdCliente'...) existe a possibilidade do usuário alterá-lo...

Seguindo os conselhos do Macorrati, consigo contornar isso com o IDataProtectionProivide, um exemplo:

  public class HomeController : Controller
{
     IDataProtector dataProtector;

     public HomeController(IDataProtectionProvider provider)
     {
         dataProtector = provider.CreateProtector(GetType().FullName);
     }

    [HttpGet]
    public IActionResult Get()
    {
        int id = 1234;
        string encryptedId = dataProtector.Protect(id.ToString());
        int decryptedId = 0;
        if(int.TryParse(dataProtector.Unprotect(encryptedId), out decryptedId) == false){
            throw new Exception('Invalid cypher text');
        }
        //a partir deste ponto decryptedId contém um valor não cifrado
   }
..
}


Eu consigo fazer isso tranquilamente, o porém, é que, eu preciso percorrer a list<cliente>, preencher a propriedade Cliente.IdCript cliente por cliente, e montar a view.. e essa view também tem um foreach para monta-la, imaginei que seria possível fazer direto no dapper ao buscar os dados ou é possivel fazer direto na view também??


__________________________________
- Everyone has a chance


#497074 - 27/05/2021 18:04:42

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


Membro da equipe
Quando retorna a lista para o cliente é um tipo que já está cifrado, certo? Pois é, nada impede de passar outro tipo que vai ter os mesmos dados cifrados acrescidos da propriedade que você quer. Se observar bem no exemplo que passei, a conversão implícita não altera em nada os dados e não é necessário nenhum loop na conversão, mesmo de uma lista.

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


#497075 - 27/05/2021 18:08:52

NOWLIGHTS
SUMARE
Cadast. em:Abril/2011


Mas terei que criar uma classe idêntica a do cliente com mais uma propriedade, e se eu tiver que alterar a a arquitetura da entitdade cliente, terei que alterar as duas?

__________________________________
- Everyone has a chance


#497076 - 27/05/2021 18:19:58

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


Membro da equipe
Infelizmente sim. Se você precisa de uma transformação na classe do cliente e na do banco, já é por definição um DTO, não tem escapatória. O lado bom é que cria mais uma camada onde você pode aplicar ainda mais transformações e mais segurança.

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


#497077 - 27/05/2021 18:30:00

NOWLIGHTS
SUMARE
Cadast. em:Abril/2011


Última edição em 27/05/2021 18:42:00 por NOWLIGHTS

Entendii, muitíssimo obrigado!!

Uma ultima ressalva, em questão de velocidade de processamento, é melhor esse usar o operador explicito ou usar foreach para montar a classe com idCrip??


__________________________________
- Everyone has a chance


#497078 - 27/05/2021 20:51:00

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


Membro da equipe
Para esse tipo de coisa especificamente eu uso operadores implícitos mesmo. Eles já tem seu 'código interno' de conversão de conjuntos, o que é um passo à menos para dar pau.

_______________________________________________________________________
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 NOWLIGHTS em 28/05/2021 14:25:36