建模三元关系

时间:2010-11-17 14:25:59

标签: nhibernate

我正在处理一个错误的数据库模式......不太理想。该域名涉及课程。这些课程有先决条件和相关课程。 db模型是这样的:

课程    courseid -int    code -varchar

related_courses   part_number varchar   related_pa​​rt_number varchar   输入int

正如您可能已经猜到的那样,课程和相关课程表不是通过课程pk连接,而是代码列。然后,关系类型由related_course中的type列定义。

我希望在课程对象中列出一系列先决条件和相关课程列表,但我没有成功。我现在正试图将课程与相关项目匹配,然后过滤类型。这也不起作用。

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

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时抛出错误,所以我猜它正在尝试将relatedite0_.Part_Id ='1632LGEE-ILT'/ * @ p0 * /转换为整数。

非常感谢任何帮助,

1 个答案:

答案 0 :(得分:0)

尝试将Identity属性映射到您的实体。 对于CourseMap这样的东西

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

我不知道是否会这样做,因为我不确定我是否完全理解你的模型