Scenario:
avete sviluppato un portale web utilizzando il WebPart Framework, avete eseguito la fase di test e avete rilasciato il sistema al cliente, che lo sta collaudando inserendo dati a iosa nel db mediante le vostre webpart. Il cliente vi chiede delle modifiche e siete costretti a sostituire alcune properties dichiarate [Personalizable] con delle altre che gestiscono dati in maniera differente.
...e i dati già inseriti dal cliente e da noi persistiti nelle tabelle di ASP.NET ??!?? Sappiamo benissimo che sostituendo proprietà di personalizzazione rendiamo "orfani" i dati scritti nelle tabelle di personalizzazione. Come fare per agganciarli nuovamente e "travasarli" nelle nuove properties?
Soluzione:
Lavoriamo con l'interfaccia IVersioningPersonalizable. Espone un unico metodo:
implementando questa interfaccia avete la possibilità di mappare i dati di una proprietà e, se questa viene rimossa, "spostarli" in un'altra. Il metodo Load riceve un dizionario contenente tutti i dati orfani inseriti in tabella dalla proprietà non più esistente.
public new void Load(IDictionary datiOrfani)
{
foreach (DictionaryEntry de in datiOrfani)
{
if (de.Key.ToString() == "Prop1")
{
_prop3 = de.Value.ToString();
}
}
}
Nel codice di esempio se i dati orfani sono stati in precedenza scritti dalla property Prop1, i suoi dati sono ora mappati nella property Prop3.
powered by IMHO 1.3