J'utilise Fluent NHibernate pour faire mes mappings NHibernate, mais maintenant je suis arrivé à un problème que je ne suis pas sûr de savoir comment résoudre. Une version simplifiée du problème suit.Comment mettre à jour des champs spécifiques de classe dans Fluent NHibernate sans mettre à jour l'ensemble de l'objet?
J'ai une classe d'utilisateurs:
public class User {
public virtual int Id { get; set; }
public virtual string FirstName { get; set; }
public virtual string LastName { get; set; }
}
C'est associé Fluent NHibernate classe Carte
public class UserMap : ClassMap<User> {
public UserMap() {
Id(x => x.Id);
Map(x => x.FirstName);
Map(x => x.LastName);
}
}
J'ai deux formes web. Un formulaire me permet de changer le prénom des utilisateurs, et le second formulaire me permet de changer le nom de famille des utilisateurs. Ce que je suis en train de réaliser est une instruction SQL simple comme ceci:
Pour la première forme:
UPDATE [users] SET firstname='new first name' WHERE id=1
Pour la deuxième forme:
UPDATE [users] SET lastname='new last name' WHERE id=1
Actuellement NHibernate effectue l'instruction SQL suivante sur mon La base de données:
UPDATE [users] SET firstname=null, lastname='new last name' WHERE id=1
Le problème dans l'application du monde réel, c'est qu'il y en a trop propriétés à mettre à jour sur certains gros objets (ainsi que les restrictions d'accès), et il semble inutile de mettre à jour l'objet entier, quand tout ce que je veux/je suis autorisé à faire est de mettre à jour une seule propriété. Je souhaite que quelqu'un puisse fournir des conseils sur la façon dont je peux réaliser ceci, ou me diriger dans la bonne direction pour résoudre ceci.
Voir ici pour plus de discussions: http://stackoverflow.com/questions/1243390/what-is-the-best-approach-to-update-only-changed-properties-in-nhibernate-when- se. En outre, je ne comprends pas vraiment pourquoi vous allez échanger la simplicité et faire beaucoup de travaux manuels tout de suite - avez-vous essayé la solution? La mise à jour dynamique ne fonctionnera-t-elle pas pour vous (mapping.DynamicUpdate() dans FNH)? – queen3
Je viens de vérifier mon code. J'ai exporté les mappages FNH et les mises à jour dynamiques sont activées, mais cela ne semble pas faire de différence. Il suffit de réécrire mon dépôt pour pouvoir utiliser la même session et voir si sélectionner avant la mise à jour fait une différence. –