2010-01-05 2 views
1

J'ai deux tables que je veux la carte à une classe qui ressemble à:Courant NHibernate - Carte 2 tables à une classe

CUSTOMER_INFO_CLASS.cs 
---------------------- 
Id (CUSTOMER table) 
CustomerName (CUSTOMER table) 
CustomerTypeDesc (CUSTOMER_TYPE table) 

J'ai essayé de le faire avec se joindre, comme suit:

Table("CUSTOMER"); 

Id(x => x.ID).Length(10).Column("CustomerId"); 
Map(x => x.CustomerName); 

Join("CUSTOMER_TYPE", m => 
    { 
    m.Optional(); 
    m.Map(x => x.CustomerTypeDesc); 
    m.KeyColumn("CustomerType"); 
    }); 

Le problème est que le champ avec lequel j'essaie de lier les deux tables n'est pas une clé primaire dans aucun d'entre eux. (Et par défaut la jointure effectuée par le champ qui a défini comme ID) Donc j'ai trouvé que pour la table CUSTOMER_TYPE je peux définir le champ par "KeyColumn".
Comment puis-je définir que la colonne associée dans la table CUSTOMER sera CustomerTypeCode et non CustomerId? (Si je peux tout)

A la fin de la requête SQL doit ressembler:

Select Id, CustomerName, CustomerAddress, CustomerTypeDesc 
From CUSTOMER t1 
    Left join CUSTOMER_TYPE t2 
    On t1.CustomerTypeCode = t2.CustomerType 

Répondre

0

Si la table des clients mappe le membre CustomerType à la clé primaire de la table CustomerType, Hibernate devrait faire la rejoindre automatiquement pour vous.

Y a-t-il une raison pour laquelle CustomerType n'est pas lié par une référence de clé étrangère normale?

+0

Le CustomerTypeCode n'est pas une clé primaire du CLIENT et CustomerType n'est pas une clé primaire de CUSTOMER_TYPE, et à partir de là notre problème commence. Je ne sais pas pourquoi le CustomerType n'est pas lié par une clé étrangère normale, le DB a été construit il y a quelque temps. Et ce n'est pas une option de le changer, parce qu'un autre système l'utilise ... – Olga

+0

Une autre chose que j'ai remarquée est que lors de l'utilisation de join, la fluint fait la connexion comme ceci: Champ JOIN qui définit comme ID de la première table = champ que je définis dans "KeyColumn" de la deuxième table. Mais je ne veux pas utiliser la colonne ID pour rejoindre, je veux d'autres colonnes de la première table, comment puis-je le dire à nhibernate ... – Olga

Questions connexes