sql server - replicar - Sincronizar DataSet
mongodb replication (2)
¿Cuál es el mejor enfoque para sincronizar un DataSet con datos en una base de datos? Aquí están los parámetros:
- No podemos simplemente volver a cargar los datos porque están vinculados a un control de UI que un usuario puede haber configurado (es una cuadrícula de árbol que pueden expandir / colapsar)
- No podemos usar un indicador de cambio (como un UpdatedTimeStamp) en la base de datos porque los cambios no siempre fluyen a través de la aplicación (por ejemplo, un DBA podría actualizar un campo con una declaración SQL)
- No podemos usar un activador de actualización en la base de datos porque es un sistema de múltiples usuarios
- Estamos utilizando DataSets de ADO.NET
- Múltiples campos pueden cambiar de una fila dada
Miré la capacidad de Merge del DataSet, pero esto no parece mantener la noción de una columna de "ID". He analizado la capacidad de DiffGram, pero el problema aquí es que parecen generarse a partir de cambios dentro del mismo DataSet en lugar de los cambios que ocurrieron en alguna fuente de datos externa.
He estado corriendo desde esta solución por un tiempo, pero el enfoque que sé que funcionaría (con mucha ineficacia) es construir un DataSet separado y luego iterar todas las filas aplicando cambios, campo por campo, al DataSet en el que está ligado.
Alguien ha tenido un escenario similar? ¿Qué hiciste para resolver el problema? Incluso si no se ha encontrado con un problema similar, cualquier recomendación para una solución es apreciada.
Gracias
Creo que sería más fácil almacenar una lista de los nodos que el usuario ha expandido (suponiendo que pueda identificarlos de manera única), luego vuelva a cargar los datos y vuelva a vincularlos a la vista de árbol, y luego expanda todos los nodos previamente expandido.
DataSet.Merge funciona bien para esto si tiene una clave principal definida para cada DataTable; el DataSet elevará eventos cambiados a cualquier control GUI de datos
si su tabla es pequeña, puede volver a leer todas las filas y fusionar periódicamente; de lo contrario, es una buena idea limitar el conjunto a leer con una marca de tiempo; simplemente diga a los DBA que sigan las reglas y actualicen la marca de tiempo ;-)
otra opción, que es un poco de trabajo, es mantener una cola de filas modificadas (marca de tiempo, ID de fila) usando un desencadenante o procedimiento almacenado, y basar las consultas de actualización fuera de la marca de tiempo en la cola; esto será más eficiente si la tabla base tiene muchas filas, lo que le permite (a través de una unión interna en el registro de la cola) extraer solo las filas modificadas desde la última hora de sondeo.