# Test Hash Comparison - Guida al Debug ## Problema Rilevato Il sistema di confronto hash non sembra funzionare correttamente: i record vengono aggiornati anche quando i dati non sono cambiati. ## Modifiche Apportate Ho aggiunto logging dettagliato per tracciare: 1. **Generazione Hash** (`GenerateDataHash`) - πŸ” Numero di campi processati - πŸ” Elenco campi ordinati - πŸ” Stringa combinata prima dell'hashing - βœ… Hash finale generato 2. **Confronto Hash** (in `StartDataTransferWithComposite`) - πŸ“Œ Hash esistente nel database - πŸ“Œ Hash calcolato sul record corrente - βœ… Decisione: saltato o aggiornato - ⚠️ Warning se hash diversi ## Come Testare ### Passo 1: Accedi all'applicazione L'applicazione Γ¨ giΓ  in esecuzione su: **http://localhost:7550** ### Passo 2: Configura un trasferimento 1. Seleziona una sorgente dati (database o REST API) 2. Seleziona una destinazione (REST API) 3. Configura i mapping dei campi 4. **IMPORTANTE**: Assicurati che "Usa associazioni record" sia abilitato ### Passo 3: Esegui il primo trasferimento 1. Esegui il trasferimento con alcuni record 2. Verifica che i record vengano creati correttamente 3. **Annotati quanti record sono stati creati** ### Passo 4: Esegui il trasferimento duplicato 1. **SENZA modificare i dati sorgente**, esegui di nuovo lo stesso trasferimento 2. **ATTESO**: Tutti i record dovrebbero essere saltati (hash identico) 3. **PROBLEMA**: Se i record vengono aggiornati, c'Γ¨ un problema ### Passo 5: Analizza i log Apri la console PowerShell dove sta girando l'applicazione e cerca: #### Log di Generazione Hash ``` πŸ” HASH DEBUG: Generazione hash per X campi πŸ” HASH DEBUG: Campi ordinati: [campo1, campo2, campo3, ...] πŸ” HASH DEBUG: Stringa combinata: campo1=valore1|campo2=valore2|... βœ… HASH DEBUG: Hash finale generato: 1A2B3C4D5E6F... ``` #### Log di Confronto Hash (IMPORTANTE!) ``` πŸ” CONFRONTO HASH - Record 1: πŸ“Œ Hash esistente: 1A2B3C4D5E6F... πŸ“Œ Hash corrente: 1A2B3C4D5E6F... βœ… HASH IDENTICO - Record 1 saltato ``` oppure ``` πŸ” CONFRONTO HASH - Record 1: πŸ“Œ Hash esistente: 1A2B3C4D5E6F... πŸ“Œ Hash corrente: 9Z8Y7X6W5V4U... <-- DIVERSO! ⚠️ HASH DIVERSO - Record 1 marcato per aggiornamento (EntityId: 001...) ``` ## Cosa Cercare nei Log ### βœ… Scenario Corretto (Hash Identico) Se lo stesso record viene processato due volte: - La "Stringa combinata" deve essere **identica** - L'hash generato deve essere **identico** - Il record deve essere **saltato** ### ⚠️ Scenario Problematico (Hash Diverso) Se gli hash sono diversi pur con gli stessi dati, cerca differenze nella "Stringa combinata": #### Possibili Cause 1. **Campi timestamp generati automaticamente** - Se un campo contiene `DateTime.Now` o timestamp auto-generati - L'hash cambierΓ  sempre 2. **Valori con formato diverso** - Decimali: `10.5` vs `10,5` (cultura) - Date: `2024-01-01` vs `01/01/2024` - Boolean: `true` vs `True` vs `1` 3. **Campi che non dovrebbero essere nell'hash** - Campi di sistema (ID, CreatedAt, UpdatedAt, ecc.) - Campi calcolati dinamicamente 4. **Ordine campi diverso** (giΓ  gestito con `.OrderBy`) - Dovrebbe essere risolto, ma verifica che i campi siano nello stesso ordine ## Prossimi Passi in Base ai Risultati ### Se Hash Identico ma Record Aggiornato Comunque β†’ Problema nella logica di confronto o salvataggio hash ### Se Hash Diverso con Dati Identici β†’ Problema nella generazione hash (valori dinamici o formattazione) ### Se Hash NULL nel Database β†’ L'hash non viene salvato correttamente dopo il primo trasferimento ## Esempio Output Atteso ### Primo Trasferimento (Creazione) ``` πŸ” HASH DEBUG: Generazione hash per 5 campi πŸ” HASH DEBUG: Campi ordinati: [Email, FirstName, LastName, Phone, Title] πŸ” HASH DEBUG: Stringa combinata: Email=john@example.com|FirstName=John|LastName=Doe|Phone=123456789|Title=Developer βœ… HASH DEBUG: Hash finale generato: A1B2C3D4E5F6... COMPOSITE: Record 1 marcato per creazione COMPOSITE: Associazione creata con ID: 1 per record 1 - Hash: A1B2C3D4E5F6... ``` ### Secondo Trasferimento (Stesso Dato - Dovrebbe Saltare) ``` πŸ” HASH DEBUG: Generazione hash per 5 campi πŸ” HASH DEBUG: Campi ordinati: [Email, FirstName, LastName, Phone, Title] πŸ” HASH DEBUG: Stringa combinata: Email=john@example.com|FirstName=John|LastName=Doe|Phone=123456789|Title=Developer βœ… HASH DEBUG: Hash finale generato: A1B2C3D4E5F6... πŸ” CONFRONTO HASH - Record 1: πŸ“Œ Hash esistente: A1B2C3D4E5F6... πŸ“Œ Hash corrente: A1B2C3D4E5F6... βœ… HASH IDENTICO - Record 1 saltato ``` ## Raccogli Informazioni Per aiutarmi a risolvere il problema, copia e incolla: 1. **Output del primo trasferimento** (dai log della console) - Cerca le linee con "πŸ” HASH DEBUG" e "βœ… HASH DEBUG" 2. **Output del secondo trasferimento** (stesso dato) - Cerca le linee con "πŸ” CONFRONTO HASH" - Verifica se gli hash sono identici 3. **Risultato finale mostrato nell'UI** - Quanti record creati/aggiornati/saltati --- **Nota**: I log dettagliati sono attivi ora. Dopo il test, potremo ridurre il livello di logging.