Une sokution parmi d'autres : on pourra systématiquement conserver dans les dataRow la version originale correspondant à la base de donnée (les dataRow n'étant modifiées qu'au moment de l'update du SGBD) et gérer dans les objets la version courrante modifiée sans se préoccuper des DataRow originales jusqu'au moment oiù on veut appliquer les mises à jour.
On procédera ainsi
- Mettre dans toutes les Tables de la BDD une clé primaire (non modifiable) pour assurer la correspondance entre objets et DataRow.
- Créer la fonction TheDataRow=GetDataRow(PrimaryKey) renvoyant null lorsque la primary est null , ce qui indique un objet nouvellement créé,
- Créer la fonction TheObject=DataRowToObject(TheDataRow) et la fonction inverse TheDataRow=ObjectToDataRow(TheObject) ,
- Créer la fonction générique AreDataRowEquals(TheDataRow1,TheDataRow2) qui comparera toutes les colonnes des 2 DataRow.
- Créer une fonction générique IsObjectModified(TheObject). Le code de IsObjectModified(TheObject) est simple :
IsModified=AreDataRowEquals(GetDataRow(TheObject.PrimaryKey),ObjectToDataRow(TheObject))
Les fonctions"génériques" sont valables quellle que soit la DataTable.
Pour les suppressions, on pourra par exemple gérer une liste de PrimaryKeys correspondant aux objets supprimés.
Partager