2010-11-17 60 views
1

我正在处理数据库模式是错误的......不太理想。该域名涉及课程。课程有先决条件和相关课程。在DB模式是财产以后这样的:建模三元关系

课程 courseid - 诠释 代码-varchar

related_courses PART_NUMBER VARCHAR related_pa​​rt_number VARCHAR int类型

正如你可能已经猜到了,当然和相关课程表没有连接到课程pk,而是代码栏。然后,关系类型由related_course中的类型列定义。

我很想在课程对象中列出必备条件列表和相关课程列表,但我一直没有这么做。我现在试图将相关项目与课程进行匹配,然后过滤该类型。那也行不通。

这是我当前的课程和course_related的映射。

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"); 
} 

当我尝试查询了相关的课程,这是产生正确的SQL对我来说:

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 */ 

但NH抛出一个错误尝试将字符串转换为int,所以我m猜测它试图将relatedite__Part_Id ='1632LGEE-ILT'/ * @ p0 * /转换为整数。

任何帮助与此将不胜感激,

回答

0

尝试映射身份属性到您的实体。 对于CourseMap像这样的事情

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

我不知道这是否会做到这一点,因为我不知道我完全理解你的模型

+0

感谢。他们被映射。为了简洁,我只是删除了它们。也许我应该展示整个映射类。 – 2010-11-18 18:01:39