Existe-t-il un moyen pour que NHibernate ne mette à jour que les champs dont la valeur par défaut n'a pas été renseignée? Disons que nous avons cette classe simple:Mise à jour des propriétés remplies uniquement
public class Person
{
public int Id { get; set; }
public string Name { get; set; }
public int Age { get; set; }
}
Nous avons aussi un mapping standard NHibernate en utilisant les propriétés pour chaque champ et Id pour le champ Id. Supposons que nous voulions qu'une page mette à jour le nom. Nous envoyons donc l'identifiant, le stockons dans un champ masqué et affichons une zone de texte pour le nom. L'utilisateur modifie le nom et enregistre les sauvegardes. Nous POSTONS de nouveau, ajoutons un objet Personne et assignons l'identifiant et le nom entrant. Nous disons ensuite à NHibernate de mettre à jour la base de données.
Le problème est, l'âge est évidemment remis à 0 dans la base de données car il n'a pas été rempli à partir du POST. Le moyen le plus évident consiste à envoyer la valeur Age à la page, à la stocker dans un champ caché et à la remplir avant de l'enregistrer. Cela fonctionne bien jusqu'à ce que vous obteniez un peu plus de propriétés sur votre objet et que vous vouliez seulement en modifier une main à l'écran (ou une grande liste d'objets Person, ce qui peut nécessiter de stocker beaucoup de valeurs dans des champs masqués). Pour revenir à l'objet de la question: est-il possible de dire à NHibernate d'ignorer la propriété Age, car elle aurait une valeur par défaut (0) avant d'être mise à jour, ou suis-je coincé avec une tonne de champs cachés pour conserver les valeurs existantes?
Oui, je peux charger la personne, définir son nom et l'enregistrer. Cependant, ceci est pour une plus grande liste de tels objets, donc je fais soit une charge par objet, soit je les récupère tous et j'effectue une recherche depuis la collection in memory pour trouver l'entité correcte à mettre à jour moi-même. De toute façon est une douleur (bien que faisable). Je me demandais s'il y avait un moyen plus facile. –