Il problema è questo (lo riporto per chiarezza).
Tabella CLIENTI con indice univoco sul campo "CODICE".
Classe DO CLIENTE sulla tabella CLIENTI.
Pannello sulla classe CLIENTE.
L'utente:
- sblocca il pannello
- cancella il cliente "001"
- inserisce un nuovo cliente "001"
- tenta di salvare il pannello ma riceve un errore di chiave duplicata sul codice
Questo perché, come spiegava eurekapv, il framework esegue sempre prima gli inserimenti, poi le modifiche e infine le cancellazioni.
Non trovo giusto neanche fare sempre prima le cancellazioni, perché potrei trovarmi, di contro, in casi in cui il DB non mi permette la cancellazione a causa di foreign key di tipo restrict su record ancora da aggiornare.
Non trovo corretto neanche quello scritto da Vittoria nella risposta dell'assistenza:
Se nella tua applicazione un'operazione del genere deve essere consentita devi gestire la cancellazione dei documenti andando effettivamente a cancellare i documenti eliminati prima dell'inserimento di quelli nuovi. Puoi farlo nella fase 0 nell'evento di before save della testata.
Dal momento che i dati presenti in memoria sull'istanza di classe DO sono corretti, credo debba essere compito del framework decidere come riportare le modifiche sul database.
Inoltre, preso come esempio il caso sopra, potrei anche ricevere un errore nel salvataggio e dover annullare l'after save dell'inserimento, avendo però già fatto la cancellazione nella fase 0.
In ogni caso non è pratico.
L'altro sistema, è togliere l'indice univoco e gestire l'univocità dei dati con del codice nella Validate, ma penso sia chiaro che è non è né pratico né elegante.
Soprattutto perché sono casi diffusi.
Ci si può pensare a fare una modifica al framework che gestisca tutte le situazioni correttamente? Oppure è impraticabile?
Grazie in anticipo.