【问题标题】:Fluent Nhibernate mapping inner join on 3 tablesFluent Nhibernate 映射 3 个表的内部连接
【发布时间】:2009-02-04 08:25:47
【问题描述】:

数据结构是:

  • 表格[问卷调查]顶部节点
  • Table[QuestionGroup] 只是一个分组 用于标题等
  • 表[问卷调查]映射 [Question][QuestionGroup]s 多对多关系和 [Questionnaire][Question]s 多对多关系
  • 表[问题]

一个问题可以存在于许多问卷/问题组中以用于报告目的。 QuestionnaireQuestion 表还包含 Question 的一些属性,这些属性可能因调查问卷而异,例如是否需要?验证等 我想不通的是如何映射 Question.Required?。 该属性在对问卷调查表中的问卷调查表进行过滤时是唯一的

当我加载问卷时,我提供了一个问卷 ID,然后给了我一个 QuestionGroups 列表,每个组都包含一个问题列表(尽管缺少验证属性)。

到目前为止,我的映射是:

   public class QuestionnaireMap : ClassMap<Questionnaire>
    {
        public QuestionnaireMap(){
            WithTable("ida_questionnaire");
            SetAttribute("lazy", "false");
            Id(x => x.ID, "ida_questionnaire_id")
                .WithUnsavedValue(0)
                .GeneratedBy.UuidHex("");

        Map(x => x.Description);

        HasMany<QuestionGroup>(x => x.QuestionGroups)
            .IsInverse()
            .WithKeyColumn("ida_questionnaire_id")
            .AsBag().SetAttribute("cascade", "all");
    }
}

public class QuestionGroupMap : ClassMap<QuestionGroup>
{
    public QuestionGroupMap()
    {
        WithTable("ida_questionnaire_group");
        SetAttribute("lazy", "false");
        Id(x => x.ID, "ida_questionnaire_group_id")
            .WithUnsavedValue(0)
            .GeneratedBy
            .UuidHex("");
        Map(x => x.Description).AsReadOnly();

        //References(x => x.Parent, "ida_questionnaire_id");

        HasManyToMany<Question>(x => x.Questions)
            .WithTableName("ida_questionnaire_question")
            .WithParentKeyColumn("ida_questionnaire_group_id")
            .WithChildKeyColumn("ida_question_id")
            .Cascade.All()
            .IsInverse();
    }
}

public class QuestionMap : ClassMap<Question>
{
    public QuestionMap()
    {
        WithTable("ida_question");
        Id(x => x.ID, "ida_question_id").WithUnsavedValue(0).GeneratedBy.UuidHex("");
        Map(x => x.Description, "description").AsReadOnly();
        Map(x => x.Type, "ida_question_type_id").AsReadOnly();

        Component<Core.Validator>(x => x.MyValidator, m =>
            {
                m.Map(x => x.Type, "ida_question_type_id");
                m.Map(x => x.RangeMin, "validate_min");
                m.Map(x => x.RangeMax, "validate_max");
            });

        HasMany<Alternative>(x => x.Alternatives)
            .IsInverse()
            .WithKeyColumn("ida_question_id")
            .AsBag().SetAttribute("cascade", "all");
    }
}

【问题讨论】:

    标签: asp.net nhibernate fluent-nhibernate nhibernate-mapping


    【解决方案1】:

    您需要将 QuestionnaireQuestion 映射为一个单独的实体。 Kyle Bailey 在他的 Many-to-many relationships with data attached in NHibernate 帖子中举了一个很好的例子。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-10
    • 1970-01-01
    • 1970-01-01
    • 2011-06-18
    • 2012-04-03
    相关资源
    最近更新 更多