Sto cercando un modo per lavorare in modo ultra-data-centric (tm) (r) su un database per mezzo di ADO.NET, non sono un FAN di questa tecnica, ma ho deciso di provare questa tecnologia per "velocizzare" lo sviluppo.

Dopo avere chiamato savechanges sul datacontext, se savechanges solleva un eccezione, per esempio a causa di violazione di foreign key, il datacontext continua a contenere l'oggetto non valido, quindi l'utente continua a vederlo come se fosse stato realmente inserito in tutti i componenti GUI che si riferiscono per mezzo del binding al datacontext. Questo è un grosso problema: non posso dirgli chiudi e riapri il programma perchè non esiste un metodo "Ripristina Stato" in Entity Framework...

Esiste una maniera di trovare e cancellare tutti gli oggetti in stato di errore nel datacontext?

Questo è un esempio di codice che crea problemi:
codice:
        public void Insert()
        {
            TQTZ_Contratti contratto = new TQTZ_Contratti();
            contratto.DescrizioneCorta = DescrizioneCorta;
            contratto.DescrizioneLunga = DescrizioneLunga;
            contratto.IDCliente = IDCLiente;
            contratto.IDDivisa = IDDivisa;
                        
            theDatabase.TQTZ_Contratti.AddObject(contratto);

            foreach (var orig in Origini)
            {             
                contratto.Origini.Add(theDatabase.RGIS_NAZIONI.First(a=>a.ID_NAZIONE ==  orig.ID_NAZIONE));
            }
            foreach (var destinaz in Destinazioni)
            {
                contratto.Destinazioni.Add(theDatabase.RGIS_NAZIONI.First(a=>a.ID_NAZIONE ==  destinaz.ID_NAZIONE));
            }

            theDatabase.SaveChanges();
            
        }
durante savechanges potrebbe essere generata un eccezione, ma l'oggetto errato continua ad esistere nella cache. Qualche idea su come si potrebbe evitare questo? (La risposta controlla prima sul database che non ci siano conflitti non vale, devo risolvere la situazione dopo che l'eccezione è stata generata...)

Ciao a tutti.