2012-10-31 3 views
1

J'utilise FluentNH avec automapping et conventions. Je mis en place une convention Many-to-Many en tant que tels:fluent nhibernate plusieurs à plusieurs conventions automapping

public class HasManyToManyConvention : IHasManyToManyConvention 
    { 
     public void Apply(IManyToManyCollectionInstance instance) 
     { 
      instance.Key.Column(instance.EntityType.Name + "Id"); 
      instance.Relationship.Column(instance.Relationship.StringIdentifierForModel + "Id"); 
     } 
    } 

En supposant ce sont mes tableaux: utilisateur (Id, nom d'utilisateur, mot de passe), Rôle (Id, Nom)

lors de la génération de base de données , la table associative est générée correctement: UserInRole (UserId, RoleId)

Cependant, il n'a pas de jeu de clés primaires composites. Une idée pour résoudre ce problème de la convention?

Quelqu'un? Serait-ce actuellement non supporté par Fluent?

+0

Chaque appel à 'instance.Relationship.Column()' ajoute un autre aux colonnes existantes qui se trouvent dans la collection 'instance.Relation.Columns', ce qui explique pourquoi vous obtenez un ensemble de clés primaires composites. Je suis actuellement en train de chercher un moyen de réinitialiser les colonnes, mais jusqu'ici je n'ai pas eu de chance. –

+0

S'il vous plaît se référer à ma question connexe: http://stackoverflow.com/questions/9772230/overriding-child-key-column-name-in-hasmanytomanyconvention –

+0

@ SandorDrieënhuizen le message référencé a été supprimé. –

Répondre

0

Il s'avère que la convention devrait rester la même. Toutefois, au lieu d'utiliser IList <utilisateur> et IList < rôle > sur mes définitions d'entité, j'utilise maintenant ISet <utilisateur> et ISet < rôle >. Maintenant, NHibernate créera automatiquement une clé primaire composite sur la table associative.

Questions connexes