2010-11-17 5 views
1

Je fais face à un schéma de base de données qui est err ... pas idéal. Le domaine traite des cours. Les cours ont des prérequis et des cours connexes. Le modèle db est somthing comme ceci:modélisation relation ternaire

Cours courseid -INT Code -varchar

related_courses PART_NUMBER varchar related_part_number varchar type int

Comme vous l'avez deviné, le cours et cours liés La table n'est pas connectée au cours pk, mais à la place la colonne de code. Ensuite, le type de relation est défini par la colonne type dans related_course.

Je voudrais avoir une liste de conditions préalables et une liste de cours connexes dans mon objet de cours, mais je n'ai pas réussi à le faire. J'essaye maintenant juste de faire correspondre le cours avec les articles relatifs et filtre alors sur le type. Cela ne fonctionne pas non plus.

Voici ma cartographie actuelle pour les cours et les cours.

public CourseMap() 
{ 
    Map(x => x.Code); 
    HasMany(x => x.RelatedItems) 
     .Access.Property() 
     .PropertyRef("Code") 
     .KeyColumn("Part_Id"); 
} 

public CourseRelatedMap() 
{ 
    References(x => x.Course, "part_id"); 
    HasMany(x => x.RelatedCourses) 
     .Access.Property() 
     .KeyColumn("part_related_id"); 
     //.PropertyRef("part_related_id"); 
} 

Lorsque je tente d'interroger les cours liés, il génère le sql correct pour moi:

SELECT relatedite0_.Part_Id   as Part2_1_, 
     relatedite0_.CourseRelatedId as CourseRe1_1_, 
     relatedite0_.CourseRelatedId as CourseRe1_12_0_, 
     relatedite0_.part_id   as part2_12_0_, 
     relatedite0_.Type   as Type12_0_ 
FROM OCT_Course_Related relatedite0_ 
WHERE relatedite0_.Part_Id = '1632LGEE-ILT' /* @p0 */ 

Mais NH est de lancer une erreur en essayant de convertir une chaîne en int, donc je m devinant qu'il essaye de convertir relatedite0_.Part_Id = '1632LGEE-ILT'/* @ p0 */en un entier.

Toute aide à ce serait grandement apprécié,

Répondre

0

cartographie Essayez propriétés d'identité à vos entités. Pour CourseMap Quelque chose comme ça

Id(x => x.Id).Column("courseid") 

Je ne sais pas si cela va le faire comme je ne suis pas sûr d'avoir compris votre modèle

+0

Merci. Ils sont cartographiés. Je les ai juste enlevés pour la brièveté. Peut-être que je devrais montrer l'ensemble des classes de cartographie. –