Récemment, j'ai rencontré un comportement étrange dans l'automapping de Fluent NHibernate. J'ai la structure de classe suivante (certaines propriétés ont été coupées pour des raisons de concision).
public class UserGroup
{
public virtual UserGroup ParentGroup { get; set; }
public virtual UserGroupMember Manager { get; protected set; }
public virtual ISet Members { get; protected set; }
}
et
public class UserGroupMember : BaseEntity
{
public virtual User User { get; set; }
public virtual UserGroup Group { get; set; }
}
Le mapping pour UserGroup:
public class UserGroupMap : IAutoMappingOverride
{
public void Override(AutoMapping mapping)
{
mapping.HasMany(el => el.Members)
.Cascade
.AllDeleteOrphan().Inverse().LazyLoad();
}
}
L'automapping crée deux colonnes (toutes deux des clés étrangères) dans la table UserGroupMember pour refléter la relation entre UserGroup et UserGroupMembers. J'ai découvert que le mapping généré contient la mauvaise colonne (comme on peut le voir ci-dessous):
ce qui entraîne des requêtes incorrectes:
- Lors de l'insertion dans UserGroupMember - Group_Id est utilisé (ce qui est correct), et non Pasrent_Id
- Lors de la sélection dans UserGroupMember - Parent_Id est utilisé
Group_Id est la colonne du fichier de mapping UserGroupMember qui reflète la propriété Group dans UserGroupMember.
J'ai essayé de modifier le mapping en ajoutant .KeyColumn("Group_Id") et cela résout le problème. Mais y a-t-il un moyen de faire en sorte que Fluent NHibernate 'pense de la bonne manière'?