En Proveedor del núcleo de Couchbase EF es ahora generalmente disponible. Esta versión lleva la potencia de Entity Framework Core a Couchbase, permitiendo a los desarrolladores .NET trabajar con Couchbase utilizando los patrones familiares de EF Core.
¿Qué es el proveedor Couchbase EF Core?
Entity Framework Core (EF Core) es un popular O/RM que simplifica el acceso a bases de datos para aplicaciones .NET. Permite a los desarrolladores trabajar con datos utilizando objetos C# y consultas LINQ en lugar de escribir consultas de base de datos sin procesar. EF Core permite la integración con varias bases de datos, proporcionando seguimiento automático de cambios, transacciones y una API DbContext familiar. Se trata de una interfaz familiar que los desarrolladores pueden utilizar para ahorrar tiempo e integrarse con muchos marcos de trabajo y bibliotecas adyacentes a bases de datos.
En Proveedor del núcleo de Couchbase EF permite a los desarrolladores utilizar Entity Framework Core con Servidor Couchbase y Couchbase Capella (ahora disponible con un nivel gratuito perpetuo). Con este proveedor, puedes trabajar con documentos de Couchbase como si fueran entidades relacionales, usando consultas Linq, DbContext y seguimiento de cambios.
Para empezar
Para instalar Couchbase EF Core Provider, añada el archivo Paquete NuGet:
|
1 2 3 4 5 |
# .NET CLI dotnet add package Couchbase.EntityFrameworkCore # Or using Package Manager Install-Package Couchbase.EntityFrameworkCore |
Ejemplo: uso de EF Core con Couchbase
A continuación se muestra un ejemplo sencillo de "carrito de la compra" sobre cómo configurar y utilizar la función Proveedor del núcleo de Couchbase EF con un modelo de carrito de la compra.
Defina sus modelos de entidad
|
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; } } |
Crear un DbContext para 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"); } } |
Este arreglo asume que usted ha creado un bucket en Couchbase llamado Comprasque contiene un ámbito llamado Comercio electrónicoque contiene colecciones Artículos y Carros.
Además, tenga en cuenta que el registro es opcional, pero es una buena idea activarlo para ayudar a identificar cualquier problema que pueda surgir.
Insertar y consultar datos
|
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)); } |
Este es un ejemplo del aspecto que tendrán los documentos en Couchbase tras la inserción:
|
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 ... |
¿Qué funciona en la versión GA?
Toda la funcionalidad de EF Core es muy, muy grande. Ser capaz de manejar cada posible sentencia Linq, por ejemplo, es casi imposible, incluso para proveedores maduros de EF Core como SQL Server. Sin embargo, esta versión soporta muchas de las capacidades básicas de EF Core, incluyendo:
✅ Compatibilidad con LINQ - Traduce las consultas LINQ a Couchbase SQL.
✅ Operaciones CRUD básicas - Las operaciones de inserción, actualización y supresión funcionan como es debido.
✅ Seguimiento de cambios - Se realiza un seguimiento de las entidades para una actualización eficaz.
También tenga en cuenta que el uso de métodos Async es obligatorio. El SDK .NET de Couchbase es completamente asíncrono. Si intentas usar un método no asíncrono, obtendrás un error de ejecución del tipo Couchbase EF Core Database Provider no soporta E/S síncrona.
Limitaciones conocidas
Aunque se trata de un hito importante, algunas funciones aún están en fase de desarrolloincluyendo:
❌ Desnormalización - Anidamiento de colecciones dentro de documentos (por ejemplo, almacenar Artículos en Carrito como un único documento JSON) aún no es compatible.
❌ Carga ansiosa - Incluir() pueden no funcionar como se espera.
❌ Soporte de funciones SQL - Algunas funciones SQL++ como META, RYOWetc., no se aplican plenamente.
❌ Transacciones - Esta versión aún no es compatible.
¡Únete a la conversación!
Queremos tu opinión Ayude a dar forma al futuro de la Proveedor del núcleo de Couchbase EF:
-
- Hacer preguntas y compartir experiencias en el Foros Couchbase .NET.
- Chatea con nosotros en Discord - Únete a nuestra comunidad.
- Informar de los problemas y contribuir en GitHub.
¿Y ahora qué?
Esta versión es sólo el principio. Estamos trabajando activamente en la construcción de esta implementación EF Core. Su opinión ayudará a priorizar la funcionalidad.
Pruébalo hoy mismo y dinos qué te parece. ¡Feliz programación!