2010-06-02 7 views
10

J'ai une base de données héritée et une relation un-à-un entre deux tables. La chose est que cette relation utilise deux colonnes, pas une. Existe-t-il un moyen de dire dans nhibernate que lors de l'obtention d'une entité référencée, il a utilisé deux colonnes dans la déclaration de jointure, pas une seule? J'ai une structure de tableau similaireplusieurs-à-un avec plusieurs colonnes

TaskProgress

  • ProgressId
  • TaskId
  • AssignmentId
  • UserId

Tâches

  • taskId
  • AssignmentId
  • TaskName

Chaque tâche peut être asigned dans différentes missions. Cela signifie que cette tâche unique pour la progression de la tâche ne peut être fondée que par les champs AssignmentId et TaskId.

Je suis en train d'utiliser ceci:

References(x => x.Template) 
      .Columns() 
      .PropertyRef() 

mais ne peut pas obtenir la carte comment rejoindre sur plusieurs colonnes, des idées?

Répondre

5

Je suppose de votre utilisation de PropertyRef dans l'exemple de code que les deux colonnes ne forment pas une clé primaire composite. Si c'est le cas, alors vous n'avez pas de chance car la propriété-ref ne peut accepter qu'une seule propriété. A en juger par les commentaires dans issue NH-1722, cette fonctionnalité apparemment disponible dans Hibernate mais n'a pas été porté sur NHibernate.

Mise à jour: Le schéma que vous avez ajouté ressemble à un nombre de plusieurs à plusieurs avec une relation de données supplémentaire entre tâche et affectation. TaskProgress est la table de liens entre Task et Assignment. Si TaskProgress n'avait pas le champ UserId supplémentaire, vous pourriez le modéliser comme un simple many-to-many. Parce que la table de liaison a des données supplémentaires, cela devient un peu plus compliqué.

Plusieurs-à-plusieurs avec des données supplémentaires modélisent généralement en créant un objet représentant la table de liaison (TaskProgress) et en modélisant la relation comme deux relations un-à-plusieurs. Autrement dit, la tâche et l'affectation ont des relations un-à-plusieurs avec TaskProgress. TaskProgress a des propriétés pour Task, Assignment et User.

+0

Y at-il une solution de contournement, l'utilisation de la formule peut-être? – Sly

+0

Aucun que je connaisse. Mais avez-vous vraiment une relation 1: 1 qui n'est pas liée à la clé primaire? Pouvez-vous poster suffisamment de définitions de table pour illustrer le problème? –

+0

J'ai mis à jour le message initial pour fournir plus de détails – Sly

Questions connexes