コード例 #1
0
        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"));
            }
        }
コード例 #2
0
        /// 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);
                    }
                }
            }
        }