Comment peut-on supprimer les objets NHibernate en utilisant un critère?
Ce doit être une question simple. Compte tenu des critères, comment on supprime les entités répondant aux critères?
La justification:
HQL et NH sont les critères NHibernate spécifique des constructions et en tant que tels, ils sont à côté serveur DAL détails de mise en œuvre. Je ne veux pas de "fuite" sur le côté client. Donc, de notre côté client fournit des expressions LINQ pour le serveur. Jusqu'à maintenant les demandes pour lesquelles sélectionnez les demandes et LINQ to NHibernate thématiques avec eux très bien.
Cependant, il est nécessaire de mettre en œuvre lot opération de suppression maintenant. Comme d'habitude, le côté client fournit une expression LINQ et le serveur est de supprimer des entités satisfaisant l'expression.
Malheureusement, LINQ to NHibernate est d'aucune aide ici. Le plus qu'il peut faire est de traduire la donnée expression LINQ pour NHibernate critères.
De toute façon, c'est l'histoire. Je tiens à souligner que le côté client est au courant de NHibernate à tous et je tiens à rester de cette façon.
P. S.
Je suis en utilisant NH 2.1
source d'informationauteur mark
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser les critères pour sélectionner les Identifiants de vos éléments, se joindre à eux dans une chaîne de caractères et l'utilisation HQL pour les supprimer?
Quelque chose comme:
Ce code n'a pas été testé ou compilé (en particulier, je ne suis pas sûr de la HQL l'article), mais je pense que vous avez eu l'idée: nous ne sommes pas récupérer l'ensemble des objets grâce à la projection, mais seulement des indices.
Tout simplement, jusqu'à ce 2.1.2 vous ne pouvez pas.
Toutefois, si vous pouvez traduire l'expression LINQ pour HQL (ou le ICriteria à HQL) alors vous pouvez utiliser la surcharge
ISession.Delete()
méthode qui utilise un passé HQL chaîne.Dans votre repository/dao/persistencemanager/quelle que soit la classe:
et puis
Voir Davy Brion post Accès aux données avec NHibernate.
Modifier:
Autant que je sache, si vous souhaitez utiliser les Critères que vous avez besoin de charger des objets, et d'itérer sur eux pour les supprimer. Vous pouvez également utiliser les requêtes HQL ou de passer dans le SQL à la session.
Je sais que c'est une vieille question, mais pour l'argument de l'amour, si l'on utilise un modèle de référentiel, vous pouvez déclarer une méthode de suppression qui est le suivant:
Note le code est à l'aide d'expressions afin de référentiel d'interface suffisamment générique de sorte que vous pouvez également mettre en place un par exemple de l'Entité Cadre référentiel.