моделирование троичных отношений - PullRequest
1 голос
/ 17 ноября 2010

Я имею дело со схемой базы данных, которая ошибочна ... не идеально. Домен занимается курсами. Курсы имеют предпосылки и соответствующие курсы. Модель БД выглядит примерно так:

Курсы конечно код -varchar

related_courses part_number varchar related_part_number varchar введите int

Как вы уже догадались, курс и связанная с ним таблица курсов не связаны с курсом pk, а столбцом кода. Тогда тип отношения определяется столбцом типа в related_course.

Мне бы хотелось иметь список предварительных условий и список связанных курсов в моем объекте курса, но я безуспешно делал это. Сейчас я пытаюсь сопоставить курс с соответствующими предметами, а затем отфильтровать по типу. Это тоже не работает.

Вот мое текущее отображение курса и курса.

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 голосов
/ 18 ноября 2010

Попробуйте сопоставить свойства Identity с вашими сущностями.Для CourseMap Нечто подобное

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...