Comment puis-je déterminer quels champs ont été modifiés après la modification du modèle ?
Réponses
Trop de publicités?Si vous utilisez Linq to SQL, la méthode GetModifiedMembers prend un argument de type Object et renvoie un tableau d'objets System.Data.Linq.ModifiedMemberInfo. Chaque classe de table du DataContext possède une méthode GetModifiedMembers qui peut être invoquée sur n'importe quelle entité.
http://msdn.microsoft.com/en-us/library/system.data.linq.itable.getmodifiedmembers.aspx
Dans Entity Framework, en utilisant ObjectStateManager, on peut accéder à toutes ces informations de changement comme l'état de l'objet (ajouté/modifié/supprimé), les propriétés modifiées, les valeurs d'origine et actuelles.
IEnumerable<ObjectStateEntry> changes =
this.ObjectStateManager.GetObjectStateEntries(
EntityState.Added | EntityState.Deleted | EntityState.Modified);
Vous pouvez implémenter INotifyPropertyChanged sur vos entités. Vous auriez besoin de déclencher l'événement PropertyChanged pour chaque propriété... il y a donc un peu de refactoring à faire pour que cela fonctionne. C'est le seul moyen intégré pour y parvenir avec .NET.
Si vous ne souhaitez pas implémenter INotifyPropertyChanged manuellement, vous pouvez utiliser PostSharp pour mettre à jour vos classes et ajuster vos propriétés au moment de la compilation. Cependant, cela nécessiterait un effort beaucoup plus compliqué au départ.