2010-04-14 4 views
0

J'utilise asp.net 3.5Trouver les propriétés modifiées d'une classe

J'ai une classe de licence contenant 10 propriétés et non marquée comme sérialisable. Je dois enregistrer les changements de propriété dans la base de données. La licence est une classe d'entité et il n'est pas dans mon champ de la modifier. Donc, je ne peux pas le marquer comme serializabel ni je peux utiliser IpropertyChanged Interface.

Maintenant, je ne peux pas le stocker dans viewstate car il n'est pas sérialisable. Je voulais le stocker afin que je puisse le comparer avec de nouvelles valeurs et voir quelle valeur a changé.

Comment procéder.

+0

Utilisez-vous LINQ2SQL? Si oui, il a quelques méthodes pour y faire face. – leppie

+0

Non, nous n'utilisons pas LINQ2SQL.Nous utilisons la bibliothèque d'entreprise et peupler nos entités dans DAL. – Rohit

Répondre

2

Vous pouvez le faire en écrivant une classe qui regarde un objet cible et utilise la réflexion pour stocker la valeur de toutes ses propriétés exposées dans un dictionnaire Nom/Valeur. Ensuite, au moment de la "comparaison", vous utilisez à nouveau la réflexion et la comparez aux valeurs stockées dans votre dictionnaire?

Juste une supposition ...

0

Si vous avez l'objet d'origine (ie. Avant qu'il ne soit changé). Ensuite, il pourrait être préférable d'utiliser la réflexion pour faire défiler les propriétés exposées et les comparer.

Votre code sera probablement à quelque chose comme ça (ce n'est pas un échantillon complet):

Type type = license.GetType(); 
PropertyInfo[] properties = type.GetProperties(BindingFlags.Instance | BindingFlags.Public); 
foreach(PropertyInfo property in properties) 
{ 
//compare your properties with property.GetValue(newLicense, null) and property.GetValue(originalLicense, null); 
} 

Ensuite, vous pouvez stocker ou faire ce que vous voulez avec les différentes colonnes.

0

En alternative aux réponses données, vous pouvez consulter la programmation orientée aspect (par exemple PostSharp: http://www.sharpcrafters.com/). De cette façon, vous pouvez créer une méthode en dehors de la classe qui est appelée chaque fois qu'une propriété est définie. Après un diff toutes les modifications peuvent être insérées dans la base de données

Questions connexes