public override void XmlDeserialize(XElement element) { if (element != null) { this.targetPropertyName = element.GetAttribute("propertyName", string.Empty); this.targetPropertyType = PrimitiveTypesHelper.ToSystemType(element.GetAttribute("propertyType", PrimitiveType.@string)); this.hasMemory = element.GetAttribute("hasMemory", true); var converter = TypeDescriptor.GetConverter(this.targetPropertyType); this.newValue = converter.ConvertFrom(element.GetAttribute("newValue", string.Empty)); base.XmlDeserialize(element.Element("Modifier")); } }
/// Recopie l'ensemble des propriétés simples (membres par valeur). /// Ne recopie par les champs qui composent la clé unique ainsi que l'identifiant. /// </summary> /// <param name="entity">Entité ou copier les valeurs</param> /// <param name="other">Entité depuis laquelle on va copier les valeurs</param> public static void ShallowCopy(this IEntity entity, IEntity other) { if (other == null) { throw new ArgumentNullException("other"); } if (entity.GetType() != other.GetType()) { throw new InvalidOperationException(string.Format("La recopie des propriétés d'un objet nécessite que le type source et le type cible soient identiques.")); } // Récupération des propriétés de l'objet à recopier. Les attributs ne doivent pas être notés comme Id foreach (var property in AttributeHelper.GetValueAndPropertyNameWithAttributeExceptions(other, new Type[] { typeof(IdAttribute) }, true)) { var propertyToSetValue = entity.GetType().GetProperty(property.Key); // Si la propriété n'est pas nulle et que l'on est sur une propriété dont la valeur n'est pas une référence. if (propertyToSetValue != null && PrimitiveTypesHelper.IsByValueType(propertyToSetValue.PropertyType) && propertyToSetValue.SetMethod != null) { propertyToSetValue.SetValue(entity, property.Value); } // Détection des changements de propriétés sur le model afin de logguer les évènements de modification de valeurs var oldValue = propertyToSetValue.GetValue(entity); if (oldValue != property.Value) { if (!ValuesChanged.ContainsKey(propertyToSetValue.Name)) { ValuesChanged.Add(propertyToSetValue.Name, new Tuple <dynamic, dynamic>(oldValue, property.Value)); } else { ValuesChanged[propertyToSetValue.Name] = new Tuple <dynamic, dynamic>(oldValue, property.Value); } } } }