Pregunta

Estoy buscando una solución a un problema de diseño. Esto tomará un poco de explicación. Que iba a publicar el código, pero que woul hacer esto aún más.

Tengo una colección personalizada genérica que utilizo para sostener objetos de negocio, según sea necesario. Para facilitar la consulta, llamar a los objetos de negocio BO y la colección genérica GC . Dentro GC Tengo una colección privada de esos objetos de negocio que se han marcado para su eliminación. Llamar a esta colección privada PDC .

Puedo tener un número arbitrario de GC, cada uno con su propio PDC, en un momento dado, más otros BOs que no están en cualquier colección.

Cuando guardar los cambios que bucle para todos los BO y GC y tienen cada uno guardar sus cambios. Esto sucede envuelto en una TransactionScope así que Rollback base de datos cambia en todo caso no puede guardar correctamente.

Cuando un GC ahorra tengo un problema con el estado de su PDC. La GC primero guarda todos BOs con actualizaciones, a continuación, elimina los registros asociados con la JS en el PDC, a continuación, despeja el PDC de todos BOs . Hago esto por lo que el estado de la GC refleja correctamente el nuevo estado de la base de datos.

Ahora supongamos que un BO o GC no puede guardar después de que uno o más de los GC ha salvado successsfully. El TransactionScope lleva a cabo una operación de deshacer. Los registros borrados de la base de datos se restauran, pero el algunos / todos el PDC de se han despejado y que la información de estado perdieron .

Así que aquí es mi quandry: ¿Cómo puedo mantener la información PDC alrededor hasta cuando la confirmación ha ocurrido, entonces se borran garantizan las colecciones appriopriate?

TransactionScope tiene ningún caso puedo coger a que me haga saber cuando se han cometido los cambios. Hay muchos posibles Bos y GC afectadas por una operación determinada, por lo que no pueden restringir la operación de manejar uno de GC a la vez.

¿Alguna sugerencia?

¿Fue útil?

Solución

El TransactionStarted se eleva por el gestor de transacciones, y la TransactionCompleted por la propia transacción.

Es posible que desee que el GC para implementar IEnlistmentNotification ; hay un ejemplo que puede ayudarle.

También es posible que desee comprobar DNR programa de televisión 113 y 114 .

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top