Overview
Entity Framework Core le permite trabajar con datos en su aplicación sin ejecutar comandos de base de datos explícitamente. Puede insertar, actualizar o eliminar datos dentro de su aplicación y conservar esos cambios en MongoDB mediante...
SaveChanges() o método SaveChangesAsync().
Cuando llamas al método SaveChanges() o SaveChangesAsync(), el Proveedor de EF Core detecta automáticamente cualquier cambio realizado en tus datos y ejecuta los comandos necesarios para actualizar la base de datos utilizando la API de query de MongoDB.
En esta guía, puedes ver ejemplos de cómo realizar operaciones de guardar en una aplicación configurada para usar el Proveedor EF Core.
Tip
Para aprender a configurar una aplicación para usar el Proveedor EF Core, consulta Configurar el proveedor central de EF.
Operaciones de escritura transaccionales
Los métodos SaveChanges() y SaveChangesAsync() son transaccionales por defecto. Esto significa que si ocurre un error durante una operación, el proveedor revierte cualquier cambio realizado en la base de datos. Por esta razón, tu aplicación debe estar conectada a una implementación de MongoDB Server que sea capaz de manejar transacciones, como un set de réplicas.
Puedes desactivar las transacciones automáticas en los métodos SaveChanges() y SaveChangesAsync() configurando la propiedad AutoTransactionBehavior en AutoTransaction.Never en tu subclase de DbContext durante la configuración de la aplicación. No obstante, no recomendamos desactivar esta funcionalidad. Hacerlo provoca que cualquier cambio de concurrencia o fallo de operación durante la operación de guardado deje la base de datos en un estado inconsistente.
El siguiente ejemplo muestra cómo deshabilitar las transacciones automáticas en los métodos SaveChanges() y SaveChangesAsync():
dbContext.Database.AutoTransactionBehavior = AutoTransactionBehavior.Never;
Advertencia
Deshabilitar las transacciones automáticas puede conducir a inconsistencias de datos. Recomendamos que no desactive esta funcionalidad.
Insert
Puedes utilizar el método Add() para insertar una sola entidad en tu colección, o puedes utilizar el método AddRange() para insertar varias entidades a la vez.
Insertar una entidad
El procedimiento Add() acepta una sola entidad del mismo tipo que se especificó en la instancia DbSet que se está modificando.
El siguiente código utiliza el método Add() para añadir un nuevo objeto Planet a la DbSet llamada Planets. Luego llama al método SaveChanges() para insertar esa entidad en la colección de MongoDB.
db.Planets.Add(new Planet() { name = "Pluto", hasRings = false, orderFromSun = 9 }); db.SaveChanges();
Insertar varias entidades
El método AddRange() acepta un arreglo de entidades que desea agregar a DbSet.
El siguiente código utiliza el método AddRange() para añadir un arreglo de objetos Planet a un DbSet llamado Planets. A continuación, llama al método SaveChanges() para insertar esas entidades en la colección MongoDB.
var planets = new[] { new Planet() { _id = ObjectId.GenerateNewId(), name = "Pluto", hasRings = false, orderFromSun = 9 }, new Planet() { _id = ObjectId.GenerateNewId(), name = "Scadrial", hasRings = false, orderFromSun = 10 } }; db.Planets.AddRange(planets); db.SaveChanges();
Update
Para actualizar una entidad, primero recupera la entidad que deseas actualizar. Luego, realiza los cambios en esa entidad. El proveedor rastrea cualquier cambio realizado en la entidad, como la configuración de propiedades o la adición y eliminación de elementos de campos con valores de lista. Para guardar la actualización en MongoDB, llama al método SaveChanges(). El proveedor EF Core compara la entidad actualizada con un snapshot de la entidad anterior al cambio y actualiza automáticamente la colección utilizando la API de query de MongoDB.
El siguiente código recupera una entidad cuyo valor name es "Mercury" y actualiza el campo name. A continuación, llama al método SaveChanges() para conservar ese cambio en la colección.
var planet = db.Planets.FirstOrDefault(p => p.name == "Mercury"); planet!.name = "Mercury the first planet"; db.SaveChanges();
Borrar
Puede utilizar el método Remove() para eliminar una sola entidad de su colección, o el método RemoveRange() para eliminar varias entidades a la vez.
Borrar una entidad
El procedimiento Remove() acepta una sola entidad del mismo tipo que se especificó en la instancia DbSet que se está modificando.
El siguiente código elimina una entidad Planet cuyo valor name es "Pluto". A continuación, llama al método SaveChanges() para eliminarla de la colección de MongoDB.
var planet = db.Planets.FirstOrDefault(p => p.name == "Pluto"); db.Planets.Remove(planet!); db.SaveChanges();
Borrar varias entidades
El método RemoveRange() acepta un arreglo de entidades para remover del DbSet.
El siguiente código encuentra dos entidades Planet y las añade a un arreglo. Luego, usa el método RemoveRange() para remover ambas entidades de la DbSet. Por último, utiliza el método SaveChanges() para remover esas entidades de la colección de MongoDB.
var pluto = db.Planets.FirstOrDefault(p => p.name == "Pluto"); var scadrial = db.Planets.FirstOrDefault(p => p.name == "Scadrial"); var planets = new[] { pluto!, scadrial! }; db.Planets.RemoveRange(planets); db.SaveChanges();
Información Adicional
Para aprender más información sobre los métodos tratados en esta guía, consulte los siguientes enlaces a la documentación de la API de .NET: