El Proveedor de EF Core para Couchbase es ahora disponible de manera general. Esta versión aporta el poder de Entity Framework Core a Couchbase, permitiendo a los desarrolladores de .NET trabajar con Couchbase utilizando patrones familiares de EF Core.
¿Qué es el proveedor de EF Core para Couchbase?
Entity Framework Core (EF Core) es un popular marco de trabajo 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 directas a la base de datos. EF Core permite la integración con diversas bases de datos, ofreciendo seguimiento automático de cambios, transacciones y una API DbContext con la que los desarrolladores ya están familiarizados. Se trata de una interfaz conocida que los desarrolladores pueden utilizar para ahorrar tiempo e integrarse con numerosos marcos de trabajo y bibliotecas relacionadas con bases de datos.
El Proveedor de EF Core para Couchbase permite a los desarrolladores usar Entity Framework Core con Servidor Couchbase y Couchbase Capellaa (ahora disponible con un nivel gratuito perpetuo). Con este proveedor, puede trabajar con documentos de Couchbase como si fueran entidades relacionales, utilizando consultas Linq, DbContext y seguimiento de cambios.
Primeros pasos
Para instalar el proveedor de EF Core de Couchbase, agregue el Paquete NuGet:
|
1 2 3 4 5 |
# .NET CLI .NET añadir paquete Couchbase.EntityFrameworkCore # O bien, usando el administrador de paquetes Install-Package Couchbase.EntityFrameworkCore |
uso de EF Core con Couchbase
Aquí tienes un ejemplo sencillo de un “carrito de compras” sobre cómo configurar y usar el Proveedor de EF Core para Couchbase con un modelo de carrito de compras.
Defina sus modelos de entidades
|
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.Extensiones; usando Microsoft.EntityFrameworkCore; usando Microsoft.Extensiones.Registro; usando NLog.Extensiones.Registro; usando ILoggerFactory = Microsoft.Extensiones.Registro.ILoggerFactory; público clase Carrito { público cadena ID del carrito { conseguir; establecer; } público DateTimeOffset Creado { conseguir; establecer; } público Lista<ArtículoEl resultado de tu pregunta se muestra a continuación: Elementos { conseguir; establecer; } } público clase Artículo { público cadena Id de artículo { conseguir; establecer; } público cadena Nombre { conseguir; establecer; } público uint Cantidad { conseguir; establecer; } público decimal Precio { conseguir; establecer; } } |
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 |
público clase CartContext : DbContext { público DbSet<CarritoEl resultado de tu pregunta se muestra a continuación: Carritos { conseguir; establecer; } público DbSet<ArtículoEl resultado de tu pregunta se muestra a continuación: Elementos { conseguir; establecer; } privado estático de solo lectura ILoggerFactory LoggerFactory = Microsoft.Extensiones.Registro.LoggerFactory.Crear(constructor =El resultado de tu pregunta se muestra a continuación: { constructor.Borrar proveedores(); constructor.AddNLog(); }); protegido anular vacío OnConfiguring(DbContextOptionsBuilder Opciones) { Opciones.UsarCouchbase(nuevo OpcionesDeClúster() .Con credenciales(“Administrador”, “contraseña”) .ConCadenaDeConexión(“couchbase://localhost”) .ConRegistro(LoggerFactory), couchbaseDbContextOptions =El resultado de tu pregunta se muestra a continuación: { couchbaseDbContextOptions.Cubo = “De compras”; couchbaseDbContextOptions.Alcance = “Comercio electrónico”; }); } protegido anular vacío OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.Entidad<CarritoEl resultado de tu pregunta se muestra a continuación:().ToCouchbaseCollection(este, “Carritos”); modelBuilder.Entidad<ArtículoEl resultado de tu pregunta se muestra a continuación:().ToCouchbaseCollection(este, “Elementos”); } } |
Este acuerdo asume que has creado un depósito en Couchbase llamado Compras, que contiene un ámbito llamado Comercio electrónico, que contiene colecciones Elementos y Carritos.
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 |
esperar usando var bd = nuevo CartContext(); var carrito = nuevo Carrito { ID del carrito = Guion.NewGuid().A cadena(), Creado = DateTimeOffset.Ahora, Elementos = nuevo Lista<ArtículoEl resultado de tu pregunta se muestra a continuación: { nuevo Artículo { Id de artículo = Guion.NewGuid().A cadena(), Nombre = “Widget”, Precio = 0.99M, Cantidad = 1}, nuevo Artículo { Id de artículo = Guion.NewGuid().A cadena(), Nombre = “Foo”, Precio = 4.99M, Cantidad = 3}, nuevo Artículo { Id de artículo = Guion.NewGuid().A cadena(), Nombre = “Baz”, Precio = 99.19M, Cantidad = 1} } }; esperar bd.AgregarAsync(carrito); esperar bd.SaveChangesAsync(); var elementos = esperar bd.Elementos.¿Dónde(i =El resultado de tu pregunta se muestra a continuación: i.Nombre == “Foo”).ToListAsync(); para cada (var i en elementos) { Consola.EscribirLínea(JsonConvert.SerializarObjeto(i)); } |
Aquí hay un ejemplo de cómo se verán los documentos en Couchbase después de 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 |
Llave: 080c210a–34eb–45ea–b9b4–e5c6f8afa4d6 { “ID de carrito”: “080c210a-34eb-45ea-b9b4-e5c6f8afa4d6”, “Creado”: “2025-03-13T17:16:31.9904224-04:00” } Llave acf54397–51c4–4ad7–bf34–d0a42061b662 { “ItemId”: “acf54397-51c4-4ad7-bf34-d0a42061b662”, “ID de carrito”: “080c210a-34eb-45ea-b9b4-e5c6f8afa4d6”, “Nombre”: “Foo”, “Precio”: 4.99, “Cantidad”: 3 } Llave a3f25210–97f2–4c95–ad4b–f241dde0d9c3 { “ItemId”: “a3f25210-97f2-4c95-ad4b-f241dde0d9c3”, “ID de carrito”: “080c210a-34eb-45ea-b9b4-e5c6f8afa4d6”, “Nombre”: “Widget”, “Precio”: 0.99, “Cantidad”: 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 instrucción LINQ, por ejemplo, es casi imposible, incluso para proveedores maduros de EF Core como SQL Server. Sin embargo, esta versión admite muchas capacidades principales de EF Core, que incluyen:
✅ Soporte para LINQ – Traduce consultas LINQ a Couchbase SQL++.
✅ Operaciones CRUD básicas – Las funciones de inserción, actualización y eliminación funcionan como se espera.
✅ Control de cambios – Las entidades se rastrean para actualizaciones eficientes.
Also note that using Async methods is required. Couchbase’s .NET SDK is completely asynchronous. If you try to use a non-async method, you will get a runtime error along the lines of Couchbase EF Core Database Provider does not support synchronous I/O.
Known limitations
While this is a significant milestone, some features are still a work in progress, including:
❌ Denormalization – Nesting collections inside documents (e.g., storing Elementos inside Carrito as a single JSON document) is not yet supported.
❌ Eager Loading – .Include() statements may not work as expected.
❌ SQL++ Function Support – Some SQL++ functions like Meta, RYOW, etc., are not fully implemented.
❌ Transacciones – Not yet supported in this release.
Join the conversation!
We want your feedback! Help shape the future of the Proveedor de EF Core para Couchbase:
- Ask questions and share experiences in the Couchbase .NET forums.
- Chat with us on Discord – Join our community.
- Report issues and contribute en GitHub.
What’s next?
This release is just the beginning! We’re actively working on building out this EF Core implementation. Your feedback will help to prioritize functionality.
Try it out today and let us know what you think. Happy coding!

Deja un comentario
Lo siento, debes estar conectado para publicar un comentario.