2011-03-17 3 views
1

J'ai un mappage HasMany qui a besoin d'une condition. Je travaille partiellement, mais il doit y avoir un meilleur moyen que ce que je suis en train de faire. La condition que j'utilise doit regarder une propriété sur une autre table à laquelle je me joins. Ce que j'ai jusqu'à présent est:Fluid NHibernate - HasMany cartographie avec condition

HasMany<MetaData>(x => x.MetaData).Table("MetaData") 
     .KeyColumn("DefinitionID") 
     .KeyColumn("TableID") 
     .Where("metadatade1_.SourceTable = 'Providers'") 
     .Cascade.SaveUpdate(); 

Dans le code ci-dessus, l'where fait référence à « metadatade1_ », parce qu'il essaie de saisir le nom complet, et est le nom NH génère. J'ai essayé d'employer "MetaDataDefinitions.SourceTable" (MetaDataDef ... est le nom de table physique), et aussi juste "SourceTable" par lui-même, cependant aucun de ceux-ci n'a fonctionné. Y at-il un moyen de ne pas essayer de qualifier complètement le nom sur la condition et de simplement passer "SourceTable = 'Fournisseurs'" OU est-il possible de faire référencer le nom généré sans que je doive le brancher manuellement? dans?

Répondre

3

En bref, non. La méthode Where (et respectivement l'attribut where= dans HBM.XML) n'acceptent que sql brut et sont donc sujettes aux problèmes que vous rencontrez.

Votre meilleure option est de ne pas utiliser de collection et de vous fier à une requête pour récupérer vos instances de métadonnées.

+0

Pas exactement j'espérais, mais merci pour la réponse! Je vais suivre votre conseil et créer une requête pour récupérer ces données. – Brosto