2010-02-11 3 views
0

J'essaye de mapper deux tables dans Fluent Nhibernate, mais la seule façon de les joindre est d'utiliser la fonction GAUCHE sur l'une des colonnes. Donc, une jointure SQL ressemblerait à ceci:NHibernate plusieurs-à-joint sur une sous-chaîne

select * from TableA INNER JOIN TableB ON LEFT(TableA.ColA, 12) = TableB.ColB 

Est-il possible de mapper ceci dans NHibernate?

Répondre

0

Je ne suis pas sûr à 100% que cela fonctionnera réellement. Mais ça vaut probablement le coup d'essayer. Disons que vous avez ClassA et ClassB. ClassA devrait avoir une référence à ClassB de la manière que vous décrivez. Vous pouvez ensuite ajouter une propriété à ClassB qui doit contenir le résultat de l'instruction sql gauche. Pour ne pas l'appeler BKey pour le moment. Alors ClassB ressemblerait à quelque chose comme ceci:

public class ClassB { 
    public virtual string BKey { get; set; } 
    //Other properties 
} 

Ensuite, lorsque vous associez ClassB vous pouvez mapper une formule à la BKEY de la propriété. Cela ressemblerait à ceci:

Map(x => x.BKey).Formula("(SELECT LEFT(b.[[columnname]], 12) FROM TableB as b WHERE b.Id = Id)"); 

Cela prendra le résultat de cette requête sql et mettre dans la propriété BKey. Ensuite, lorsque vous associez cette référence pour ClassA vous faites quelque chose comme ceci:

Reference(x => x.ClassB).PropertyRef(x => x.BKey).Column("[[TableAColumnName]]"); 

Encore une fois, je ne suis pas sûr que cela fonctionne, je ne l'ai pas essayé quelque chose comme ça moi-même.

Questions connexes