2010-08-20 11 views
0

Je suis en train de tenter un mappage de sous-classe dans Fluent NHibernate.Comment est-ce que je spécifie le nom du PK dans la table de sous-classe en utilisant SubClass dans FluentNHibernate?

Dans la mise en correspondance de classe parent, je dois préciser le nom de la colonne ID pour éviter FNH deviner correctement:

Id(x => x.Id).Column("UserId"); 

Je dois aussi indiquer l'ID (ou clé étrangère si vous le souhaitez) le nom de domaine dans le le mappage des sous-classes, puisque FNH le devine aussi incorrectement. Comment je fais ça?

+1

C'est un peu la seule personne au monde qui utilise des sous-classes dans Fluent NHibernate. :( – David

Répondre

0

Je ne l'ai pas trouvé un moyen de modifier directement le fichier de mappage lui-même, mais j'ai trouvé que l'annulation de la convention clé étrangère de Fluent NHibernate a fait l'affaire:

public class FKConvention : ForeignKeyConvention 
{ 
    protected override string GetKeyName(FluentNHibernate.Member property, Type type) 
    { 
    if (property == null) 
    { 
     // Relationship is many-to-many, one-to-many or join. 
     if (type == null) 
     throw new ArgumentNullException("type"); 
     return type.Name + "Id"; 
    } 
    // Relationship is many-to-one. 
    return property.Name + "Id"; 
    } 
} 

La nouvelle convention doit être enregistré comme expliqué au bas de cette page: http://wiki.fluentnhibernate.org/Conventions.