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 |
# .NET CLI dotnet add package Couchbase.EntityFrameworkCore # Or using Package Manager Install-Package 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 |
using Couchbase; using Couchbase.EntityFrameworkCore; using Couchbase.EntityFrameworkCore.Extensions; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Logging; using NLog.Extensions.Logging; using ILoggerFactory = Microsoft.Extensions.Logging.ILoggerFactory; public class Cart { public string CartId { get; set; } public DateTimeOffset Created { get; set; } public List<Item> Items { get; set; } } public class Item { public string ItemId { get; set; } public string Name { get; set; } public uint Quantity { get; set; } public decimal Price { get; set; } } |
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 |
public class CartContext : DbContext { public DbSet<Cart> Carts { get; set; } public DbSet<Item> Items { get; set; } private static readonly ILoggerFactory LoggerFactory = Microsoft.Extensions.Logging.LoggerFactory.Create(builder => { builder.ClearProviders(); builder.AddNLog(); }); protected override void OnConfiguring(DbContextOptionsBuilder options) { options.UseCouchbase(new ClusterOptions() .WithCredentials("Administrator", "password") .WithConnectionString("couchbase://localhost") .WithLogging(LoggerFactory), couchbaseDbContextOptions => { couchbaseDbContextOptions.Bucket = "Shopping"; couchbaseDbContextOptions.Scope = "Ecommerce"; }); } protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.Entity<Cart>().ToCouchbaseCollection(this, "Carts"); modelBuilder.Entity<Item>().ToCouchbaseCollection(this, "Items"); } } |
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 |
await using var db = new CartContext(); var cart = new Cart { CartId = Guid.NewGuid().ToString(), Created = DateTimeOffset.Now, Items = new List<Item> { new Item { ItemId = Guid.NewGuid().ToString(), Name = "Widget", Price = 0.99M, Quantity = 1}, new Item { ItemId = Guid.NewGuid().ToString(), Name = "Foo", Price = 4.99M, Quantity = 3}, new Item { ItemId = Guid.NewGuid().ToString(), Name = "Baz", Price = 99.19M, Quantity = 1} } }; await db.AddAsync(cart); await db.SaveChangesAsync(); var items = await db.Items.Where(i => i.Name == "Foo").ToListAsync(); foreach (var i in items) { 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 |
Key: 080c210a-34eb-45ea-b9b4-e5c6f8afa4d6 { "CartId": "080c210a-34eb-45ea-b9b4-e5c6f8afa4d6", "Created": "2025-03-13T17:16:31.9904224-04:00" } Key acf54397-51c4-4ad7-bf34-d0a42061b662 { "ItemId": "acf54397-51c4-4ad7-bf34-d0a42061b662", "CartId": "080c210a-34eb-45ea-b9b4-e5c6f8afa4d6", "Name": "Foo", "Price": 4.99, "Quantity": 3 } Key a3f25210-97f2-4c95-ad4b-f241dde0d9c3 { "ItemId": "a3f25210-97f2-4c95-ad4b-f241dde0d9c3", "CartId": "080c210a-34eb-45ea-b9b4-e5c6f8afa4d6", "Name": "Widget", "Price": 0.99, "Quantity": 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!