O Provedor principal do Couchbase EF agora é geralmente disponível. Esta versão traz o poder do Entity Framework Core para o Couchbase, permitindo que os desenvolvedores de .NET trabalhem com o Couchbase usando padrões familiares do EF Core.
O que é o provedor Couchbase EF Core?
O Entity Framework Core (EF Core) é um popular O/RM que simplifica o acesso ao banco de dados para aplicativos .NET. Ele permite que os desenvolvedores trabalhem com dados usando objetos C# e consultas LINQ em vez de escrever consultas brutas ao banco de dados. O EF Core permite a integração com vários bancos de dados, fornecendo rastreamento automático de alterações, transações e uma API DbContext familiar. É uma interface familiar que os desenvolvedores podem usar para economizar tempo e se integrar a muitas estruturas e bibliotecas adjacentes a bancos de dados.
O Provedor principal do Couchbase EF permite que os desenvolvedores usem o Entity Framework Core com Servidor Couchbase e Couchbase Capella (agora disponível com um nível gratuito perpétuo). Com esse provedor, você pode trabalhar com documentos do Couchbase como se fossem entidades relacionais, usando consultas Linq, DbContext e controle de alterações.
Primeiros passos
Para instalar o provedor do Couchbase EF Core, adicione o arquivo Pacote NuGet:
1 2 3 4 5 |
CLI .NET DO # dotnet adicionar pacote Couchbase.EntityFrameworkCore # Ou usando o Package Manager Instalar o pacote Couchbase.EntityFrameworkCore |
Exemplo: usando o EF Core com o Couchbase
Aqui está um exemplo simples de "carrinho de compras" de como configurar e usar o Provedor principal do Couchbase EF com um modelo de carrinho de compras.
Definir seus modelos de entidade
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
usando Couchbase; usando Couchbase.EntityFrameworkCore; usando Couchbase.EntityFrameworkCore.Extensões; usando Microsoft.EntityFrameworkCore; usando Microsoft.Extensões.Registro em log; usando NLog.Extensões.Registro em log; usando ILoggerFactory = Microsoft.Extensões.Registro em log.ILoggerFactory; público classe Carrinho { público string CartId { obter; definir; } público DateTimeOffset Criado { obter; definir; } público Lista<Item> Itens { obter; definir; } } público classe Item { público string ItemId { obter; definir; } público string Nome { obter; definir; } público uint Quantidade { obter; definir; } público decimal Preço { obter; definir; } } |
Criar um DbContext para o Couchbase
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
público classe CartContext : DbContext { público DbSet<Carrinho> Carrinhos { obter; definir; } público DbSet<Item> Itens { obter; definir; } privado estático somente leitura ILoggerFactory Fábrica de registradores = Microsoft.Extensões.Registro em log.Fábrica de registradores.Criar(construtor => { construtor.ClearProviders(); construtor.AddNLog(); }); protegida anular vazio OnConfiguring(DbContextOptionsBuilder opções) { opções.UseCouchbase(novo ClusterOptions() .ComCredenciais("Administrador", "senha") .WithConnectionString("couchbase://localhost") .Com registro (WithLogging)(Fábrica de registradores), couchbaseDbContextOptions => { couchbaseDbContextOptions.Balde = "Compras"; couchbaseDbContextOptions.Escopo = "Comércio eletrônico"; }); } protegida anular vazio OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.Entidade<Carrinho>().ToCouchbaseCollection(este, "Carrinhos"); modelBuilder.Entidade<Item>().ToCouchbaseCollection(este, "Itens"); } } |
Esse arranjo pressupõe que você tenha criado um bucket no Couchbase chamado Comprasque contém um escopo chamado Comércio eletrônicoque contém coleções Itens e Carrinhos.
Observe também que o registro em log é opcional, mas é uma boa ideia ativá-lo para ajudar a identificar quaisquer problemas que possam surgir.
Inserir e consultar dados
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
aguardar usando var db = novo CartContext(); var carrinho = novo Carrinho { CartId = Guia.NovoGuia().ToString(), Criado = DateTimeOffset.Agora, Itens = novo Lista<Item> { novo Item { ItemId = Guia.NovoGuia().ToString(), Nome = "Widget", Preço = 0.99M, Quantidade = 1}, novo Item { ItemId = Guia.NovoGuia().ToString(), Nome = "Foo", Preço = 4.99M, Quantidade = 3}, novo Item { ItemId = Guia.NovoGuia().ToString(), Nome = "Baz", Preço = 99.19M, Quantidade = 1} } }; aguardar db.AddAsync(carrinho); aguardar db.SaveChangesAsync(); var itens = aguardar db.Itens.Onde(i => i.Nome == "Foo").ToListAsync(); antes de (var i em itens) { Console.WriteLine(JsonConvert.SerializeObject(i)); } |
Veja um exemplo de como os documentos no Couchbase ficarão após a inserção:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
Chave: 080c210a-34eb-45ea-b9b4-e5c6f8afa4d6 { "CartId": "080c210a-34eb-45ea-b9b4-e5c6f8afa4d6", "Criado": "2025-03-13T17:16:31.9904224-04:00" } Chave acf54397-51c4-4ad7-bf34-d0a42061b662 { "ItemId": "acf54397-51c4-4ad7-bf34-d0a42061b662", "CartId": "080c210a-34eb-45ea-b9b4-e5c6f8afa4d6", "Nome": "Foo", "Preço": 4.99, "Quantidade": 3 } Chave a3f25210-97f2-4c95-ad4b-f241dde0d9c3 { "ItemId": "a3f25210-97f2-4c95-ad4b-f241dde0d9c3", "CartId": "080c210a-34eb-45ea-b9b4-e5c6f8afa4d6", "Nome": "Widget", "Preço": 0.99, "Quantidade": 1 } // ... etc ... |
O que funciona na versão GA?
Toda a funcionalidade do EF Core é muito, muito grande. Ser capaz de lidar com todas as instruções Linq possíveis, por exemplo, é quase impossível, mesmo para provedores maduros do EF Core, como o SQL Server. Entretanto, essa versão oferece suporte a muitos recursos essenciais do EF Core, incluindo:
✅ Suporte a LINQ - Traduz as consultas LINQ para Couchbase SQL++.
✅ Operações básicas de CRUD - Inserir, atualizar e excluir funcionam como esperado.
✅ Controle de alterações - As entidades são rastreadas para atualizações eficientes.
Observe também que o uso de métodos Async é necessário. O SDK .NET do Couchbase é totalmente assíncrono. Se você tentar usar um método não assíncrono, receberá um erro de tempo de execução do tipo O provedor de banco de dados principal do Couchbase EF não oferece suporte a E/S síncrona
.
Limitações conhecidas
Embora esse seja um marco significativo, Alguns recursos ainda estão em andamentoincluindo:
❌ Desnormalização - Aninhamento de coleções dentro de documentos (por exemplo, armazenamento de Itens dentro Carrinho como um único documento JSON) ainda não é compatível.
❌ Carregamento ansioso - .Include()
podem não funcionar como esperado.
❌ Suporte à função SQL++ - Algumas funções do SQL++, como META, RYOWetc., não estão totalmente implementados.
❌ Transações - Ainda não é compatível com esta versão.
Participe da conversa!
Queremos seu feedback! Ajude a moldar o futuro do Provedor principal do Couchbase EF:
-
- Faça perguntas e compartilhe experiências no Fóruns do Couchbase .NET.
- Converse conosco no Discord - Participe de nossa comunidade.
- Relatar problemas e contribuir em GitHub.
O que vem a seguir?
Esta versão é apenas o começo! Estamos trabalhando ativamente para desenvolver essa implementação do EF Core. Seu feedback ajudará a priorizar a funcionalidade.
Experimente hoje mesmo e diga-nos o que achou. Boa codificação!