Problems updating related objects using Entity Framework and Asp net core 3

Asked

Viewed 59 times

0

Hello friends, I hope you’re all well! I’m trying to update two entities using Entity Framework core 3.0. The "Request" Parent entity that has a list of "itensPedidoVM" daughter entities and I would like to remove the dependency of the child objects when they are removed from the front-end and/insert a new child object. I would like to know how best to do this?

Currently I’m getting the object of front-end in the form of json,

   "idCliente":"1f2d8bdc-dd2c-4a41-ba3e-54213fe19c0d",
   "itensPedidoVM":[ // preciso adicionar e remover itens dessa lista
      {// item existente
         "quantidade":1,
         "preco":20.00,
         "subTotal":20.00,
         "idProduto":"550e9837-f574-47ae-aa9c-d06d4e1d2f85",
         "idPedido":"596094e7-aa8a-4298-b560-af13a8d9270f",
         "id":"1d762af7-e8aa-4303-baf0-45e3d5d47d7b"
      },
     // { item removido
       //  "quantidade":1,
        // "preco":703.78,
         //"subTotal":703.78,
         //"idProduto":"65ee979a-00a6-4acf-adb7-9f934be43ee5",
         //"idPedido":"596094e7-aa8a-4298-b560-af13a8d9270f",
         //"id":"875be370-de86-421e-bbe1-db2ca3754b78"
      //},
      {// item novo adicionado
         "quantidade":3,
         "preco":2052.00,
         "subTotal":6156.00,
         "idProduto":"0104f083-dd99-4fac-970a-6f087554a8ae",
         "idPedido":596094e7-aa8a-4298-b560-af13a8d9270f,
         "id":null
      }


   ],
   "valorTotal":13101.28,
   "dataVenda":"2020-03-23T13:15:17.586685",
   "id":"596094e7-aa8a-4298-b560-af13a8d9270f"
}````

Quando eu tento mandar o objeto completo para que o "EF core" faça o serviço, ele não atualiza os objetos filhos que foram removidos, e não insere um objeto novo, para isso eu tive que criar duas listas uma com dados do banco de dados e outra com dados vindos do front-end, percorrer as duas listas e fazer as comparações de forma manual e executar seus devidos *inserts* e *updates*. Gostaria de saber uma forma mais elegante e mais simples de se fazer isso.

1 answer

0

In front-end you keep the list of child objects updated plus the list of children already saved in the bank ( ie, the child objects obtained from the bank will have a non-null id or id greater than zero, and each child object will have an attribute called id, if it is a new child, enter the child with id = null or id = 0, and in the back-end, in your service layer you check as per pseudo code snippet below:

InserirItensPedidoVM(List<ItemPedidoVMDto> itensPedidoVMDto){
   // Primeiro remove todos os ItemsPedido que não estão na lista advinda do front-end
   // e que pertença somente ao pedidoId referenciado nos filhos. 
   this.context.Set<ItemPedidoVM>()
   .RemoveAll(item => !itensPedidoVMDto.Any(item.Id) && 
       itensPedidoVMDto.Any(item.PedidoId)
   );

   // Aqui você iria fazer o insert da nova lista
}

Browser other questions tagged

You are not signed in. Login or sign up in order to post.