El uso de SaveChanges() en el Entity Framework es muy frecuente, y llamar a SaveChanges() tras una sola modificación o eliminación de datos devuelve el número de registros de impacto.
Para usar modificación por lotes o eliminación por lotes de datos, necesitas el método SaveChanges(false)+AceptAllChanges().
SaveChanges(false) es simplemente una notificación de que EF necesita realizar una operación en la base de datos, que está pendiente en memoria y puede deshacerse cuando sea necesario, como que el commit de AcceptAllChange() sea realmente exitoso y EF deshaga la operación de SaveChanges (false).
Cuando se trata de operaciones de transacciones distribuidas, es necesario usar TransactionScope para gestionarlas, y muchas veces escribiremos así:
Pero escribir así es arriesgado, falso Por ejemplo, context1. SaveChanges() ha tenido éxito, context2. SaveChanges() es problemático, estamos dentro del alcance. Complete() terminará cuando la transacción se confirme y Context1 se haya ejecutado con éxito
(En mi práctica, lo anterior puede revertirse normalmente, si contexto1. SaveChanges() ha tenido éxito, context2. SaveChanges() es problemático, ¡ninguno se ejecutará con éxito! Haz referencia al espacio de nombres using System.Transaction en tu proyecto. Definir un TransactionScope en el uso es equivalente a definir un alcance de cosas, es decir, el alcance de esta transacción está dentro del uso. En el ámbito de uso, si no hay alcance. Complete (comando), luego el telescopio revertirá automáticamente todas las operaciones cuando se destruya. ) Esto puede no satisfacer necesariamente nuestras necesidades. Si necesitamos que context1 y context2 se ejecuten correctamente al mismo tiempo, o ninguno tiene éxito, necesitamos hacer pequeños ajustes al código, como usar el siguiente código:
Usamos SaveChanges(false) para enviar primero los comandos necesarios de operación de base de datos a la base de datos, que es señalar que context1 y context2 realmente no han cambiado; si la transacción se termina y se revierte automáticamente, ninguno de los dos cambios se compromete realmente en la base de datos, por lo que puede revertirse correctamente.
|