CRUD significa Create (criar), Read (ler), Update (atualizar) e Delete (excluir). Na parte 2, veremos o R para leitura e criaremos um ponto de extremidade do ASP.NET Core para ler dados do Couchbase usando SQL.
Certifique-se de ler Parte 1 desta sérieque abrange a instalação e a configuração de seu projeto ASP.NET Core "wishlist".
SQL++ para ler
O Couchbase é único entre os bancos de dados NoSQL, pois oferece suporte a um implementação completa de SQL (chamado SQL++, também conhecido como N1QL) para consultar dados JSON.
O SQL++ não é uma linguagem "semelhante ao SQL" diluída. Com o SQL++, você tem JOINs, CTEs/com, ATUALIZAÇÃO, INSERIR, DELETE, MERGE, agregação/GROUP BY, BEGIN/COMMIT/ROLLBACKe muito mais.
Além disso (o "++"), você também tem recursos para lidar com dados JSON, como FALTANDO, NEST, Funções ARRAY_*, Funções OBJECT_*e muito mais.
Para este aplicativo CRUD simples, usaremos um aplicativo SQL++ SELECIONAR consulta (e índice) para retornar todos itens da minha lista de desejos.
Escrevendo sua primeira consulta SQL++
Primeiro, vamos tentar escrever uma consulta SQL++ para obter todos os itens da lista de desejos diretamente no Capella Query Workbench.
Para começar, tente:
1 |
SELECIONAR * DE demonstração.Padrão.Lista de desejos; |
Ao fazer isso, você deverá receber uma mensagem de erro. Algo como:
1 |
`não índice disponível em Espaço-chave padrão:demonstração.Padrão.Lista de desejos que jogos seu consulta. Uso CRIAR PRIMÁRIO ÍNDICE` ... |
Esse é o comportamento esperado. (A maioria das) consultas SQL++ no Couchbase não será executada a menos que haja pelo menos um índice disponível para elas.
Não tem problema. Crie um ÍNDICE PRIMÁRIO com um comando como este:
1 |
CRIAR PRIMÁRIO ÍNDICE `ix_wishlist` ON `demonstração`.`Padrão`.`Lista de desejos` |
Em geral, os índices primários não devem ser usados em um ambiente de produção típico, mas são muito úteis em um ambiente de desenvolvimento, pois garantem que qualquer A consulta SQL++ será executada na coleção indexada (embora não seja tão eficiente quanto uma coleção indexada corretamente). Quando você começar a criar consultas SQL++ mais complexas, poderá usar a função Botão "Advise" (Aconselhar) no Query Workbench para obter sugestões de índices mais eficientes a serem criados (e você deve evitar usar SELECT * sempre que puder 😆).
Depois de criar o índice, tente novamente o procedimento acima SELECIONAR novamente, e os resultados deverão ter a seguinte aparência:
1 2 3 4 5 6 7 8 9 10 11 12 |
[ { "Lista de desejos": { "nome": "Skyline Pimentão T-Camisa" } }, { "Lista de desejos": { "nome": "Joey Votto camiseta" } } ] |
Quase lá. Tente imaginar essa matriz de objetos sendo serializada em um C# Lista. Isso não funcionaria muito bem, porque os objetos são aninhados com o nome da coleção. Por isso, adquiri o hábito de colocar aliases nas coleções, assim:
1 |
SELECIONAR w.* DE demonstração.Padrão.Lista de desejos w; |
O que produz o resultado:
1 2 3 4 5 6 7 8 |
[ { "name" (nome): "Camiseta Skyline Chili" }, { "name" (nome): "Camisa de Joey Votto" } ] |
Parece bom, mas ainda está faltando alguma coisa. Onde estão os GUIDs que usamos para as chaves do documento? O Couchbase não os armazena como dados; ele os armazena como metadados. O SQL++ fornece o META() para consultar metadados. Usar META().id assim:
1 |
SELECIONAR META(w).id, w.* DE demonstração.Padrão.Lista de desejos w; |
E isso finalmente nos dá um resultado de:
1 2 3 4 5 6 7 8 9 10 |
[ { "id": "2dab198b-1836-4409-9bdf-17275a2b2462", "name" (nome): "Camiseta Skyline Chili" }, { "id": "31c9cc33-8dfe-440c-bd1b-bb038939d2e0", "name" (nome): "Camisa de Joey Votto" } ] |
Isso será serializado de forma adequada em Item da lista de desejos usando a classe criada na parte 1.
Usando o SQL++ no ASP.NET Core
Vamos colocar a consulta SQL++ que acabamos de escrever em um endpoint ASP.NET Core.
Em GiftsControllercrie um ponto de extremidade chamado Obter tudo:
1 2 3 4 5 6 |
[HttpGet] [Rota("api/getall")] público assíncrono Tarefa<IActionResult> Obter tudo() { } |
Para executar o SQL++, precisamos obter um objeto do tipo Aglomerado. O SQL++ é executado no nível do cluster (e não do bucket, do escopo ou da coleção, pois pode ser necessário JUNTAR/UNIÃO entre eles). Poderíamos voltar e adicionar Provedor de cluster como um parâmetro do construtor. Se esse endpoint fosse funcionar apenas com o SQL++, seria uma boa ideia. No entanto, vamos nos ater ao que criamos na parte 1. Temos um objeto do tipo Provedor de balde. A partir desse objeto, você pode obter um objeto do tipo Aglomerado:
1 2 3 4 5 6 7 8 9 |
[HttpGet] [Rota("api/getall")] público assíncrono Tarefa<IActionResult> Obter tudo() { var balde = aguardar _bucketProvider.GetBucketAsync("demo"); var agrupamento = balde.Aglomerado; // ... snip ... } |
A agrupamento é como o ASP.NET Core interagirá com um cluster do Couchbase de várias maneiras. Por enquanto, estamos interessados em seu objeto QueryAsync método:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
[HttpGet] [Rota("api/getall")] público assíncrono Tarefa<IActionResult> Obter tudo() { var balde = aguardar _bucketProvider.GetBucketAsync("demo"); var agrupamento = balde.Aglomerado; var resultado = aguardar agrupamento.QueryAsync<Item da lista de desejos>( "SELECT META(w).id, w.* FROM demo._default.wishlist w;" ); retorno Ok(resultado); } |
Certifique-se de que você tenha o seguinte usando na parte superior de seu GiftsController.cs file:
1 2 3 4 5 |
usando Tutorial do AspNetCore.Modelos; usando Microsoft.AspNetCore.Mvc; usando Couchbase; usando Couchbase.Consulta; usando Couchbase.Extensões.Injeção de dependência; |
Mais um aspecto a ser observado. Ao executar o SQL++, há uma série de Opções de consistência (digitalização). O padrão é ScanConsistency.NotBounded. Essa configuração significa que o mecanismo de consulta não esperar que os índices terminem de ser atualizados antes de retornar os resultados. Essa é a opção de melhor desempenho. Entretanto, em algumas situações, você desejará uma consistência de índice mais forte. O Couchbase fornece RequestPlus e AtPlus.
Experimente o ponto de extremidade do ASP.NET Core
No Visual Studio, Ctrl+F5 iniciará o aplicativo. Você deverá ver uma página OpenAPI / Swagger no navegador.
(Ignorar Previsão do tempoque veio com o modelo do Visual Studio).
Clique no endpoint para experimentá-lo. Não há parâmetros a serem especificados, portanto, basta clicar em Executar.
Agora você tem o "R" de CRUD no lugar.
O que vem a seguir?
O projeto ASP.NET Core está conectado ao Couchbase Capella e está lendo dados via SQL++.
Na próxima postagem do blog, criaremos outro endpoint de "leitura". Em vez de SQL++, analisaremos outra maneira mais rápida de acessar e ler dados.
Nesse meio tempo, você deve:
-
- Inscreva-se para um teste gratuito do Capella
- Confira o Couchbase Playground para .NET exemplos que você pode executar diretamente no navegador.