Este artículo es un artículo espejo de traducción automática, por favor haga clic aquí para saltar al artículo original.

Vista: 23237|Respuesta: 1

[Fuente] Envío masivo y procesamiento de transacciones en el Entity Framework

[Copiar enlace]
Publicado en 8/4/2017 22:10:01 | | |

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.




Anterior:EF6 utiliza Database.BeginTransaction para gestionar transacciones
Próximo:Tutoriales de la serie EF ORM Development and Use
Renuncia:
Todo el software, materiales de programación o artículos publicados por Code Farmer Network son únicamente para fines de aprendizaje e investigación; El contenido anterior no se utilizará con fines comerciales o ilegales; de lo contrario, los usuarios asumirán todas las consecuencias. La información de este sitio proviene de Internet, y las disputas de derechos de autor no tienen nada que ver con este sitio. Debes eliminar completamente el contenido anterior de tu ordenador en un plazo de 24 horas desde la descarga. Si te gusta el programa, por favor apoya el software genuino, compra el registro y obtén mejores servicios genuinos. Si hay alguna infracción, por favor contáctanos por correo electrónico.

Mail To:help@itsvse.com