/// <summary> /// Sauvegarde d'un bean. /// </summary> /// <param name="bean">Bean à sauvegarder.</param> /// <param name="columnSelector">Column Selector.</param> /// <returns>Clé primaire de l'objet.</returns> public override object Save(T bean, ColumnSelector columnSelector) { BeanDefinition definition = BeanDescriptor.GetDefinition(typeof(T)); ICollection <BeanPropertyDescriptor> propList = definition.Properties.Where(x => !x.PropertyType.Name.Equals(typeof(ChangeAction).Name) && x.MemberName != null).ToList(); T beanToSave = new T(); /* Mise à jour du bean : on ne sauvegarde que les labels en anglais ou les champs hors chaînes de caractères */ string defaultLanguage = _resourceLoader.LoadLangueCodeDefaut(); string lanCode = _resourceLoader.LoadCurrentLangueCode(); if (definition.PrimaryKey.GetValue(bean) != null && !lanCode.Equals(defaultLanguage) && definition.IsTranslatable) { T beanOld = ReferenceManager.Instance.GetReferenceObjectByPrimaryKey <T>(definition.PrimaryKey.GetValue(bean)); foreach (BeanPropertyDescriptor property in propList) { if (property.IsTranslatable) { /* la propriété est traduisible : on garde la valeur courante sur la table du bean * et sauvegardera la valeur dans la table Traductionreference. */ property.SetValue(beanToSave, property.GetValue(beanOld)); } else { /* La propriété est non traduisible : on sauvegarde la valeur normalement sur la table du bean. */ property.SetValue(beanToSave, property.GetValue(bean)); } } } else { beanToSave = bean; } object o = base.Save(beanToSave, columnSelector); definition.PrimaryKey.SetValue(bean, o); _resourceWriter.SaveTraductionReference(typeof(T), bean, lanCode); return(o); }