• .Net Mvc Repository.cs 单表自连接 查询 [2]


    4:单表自连接的查询。沿用前面Repository中的3表嵌套查询结构体的SearchBy*函数

    (1)当自连接至本表的  N—>1 属性时,即  FeedBack2(N)—>(1)FeedBack   

    在反馈表结构中,我们可以看到:FeedBackMap.cs

    public FeedBackMap()
            {
             
                Id(o => o.Id);
                Map(o => o.CreateTime);
                Map(o => o.IsDelete);
                Map(o => o.Version);
                Map(o=>o.EntityIndex);
                Map(o=>o.Contents);
                Map(o => o.Type);
                References<LoginUser>(o => o.LoginUser).Not.Nullable();
    References<FeedBack>(o => o.ParentFeedBack); HasMany<FeedBack>(o => o.ChildFeedBacks).Inverse().Cascade.All(); }

      查询界面如下:我们默认,显示的列表页,是ParentFeedBack为Null的列表,即只显示主题

     我们期望,在点击每一行的反馈是,在下面能够显示,该条目的详细信息,以及管理员对该条目的回复信息,以信件的格式如下:

    问题就在这里,我们要 用FeedBack 连接到  ParentFeedBack[FeedBack]  ,做连接,加载出ParentFeedBack_id 为 反馈信息的ID 的  FeedBack 对象

    此时,我们只需对Repository.ce 中的SearchByFeedBack()做如下修改:

            string alias = string.Empty;
                if (deepIndex > 0)
                {
                    notself = "feedBack.";
                    if (deepIndex == 1)
                    {
                        parentSearch = "ParentFeedBack"; //第二次加载到FeedBack查询ParentFeedBack时,加载此处时,参照Map文件中的属性命名 alias 做链接
    }
    else { parentSearch = parentSearch + ".FeedBack"; } alias = parentSearch; query.CreateAlias(alias, "feedBack"); } deepIndex++;

     当然,在对比判断条件时,还得做如下修改:

                     if (df.type.Equals("ParentFeedBack"))
                        {
                            query.Add(Restrictions.IsNull(notself + "ParentFeedBack")); //满足现实的List页都是反馈的主题,即文章刚开始提到的要求
                             continue;
                        }
                        if (df.type.Equals("ParentFeedBackForTwo"))   //做自连接,第二次加载
                         {
                           // query.Add(Restrictions.Eq(notself + "ParentFeedBack", df.value));
                            SearchByFeedBack(query, df.field, ref deepIndex, ref parentSearch);
                            continue;
                        }
                        if (df.type.Equals("ParentFeedBackId"))  //做自连接,第二次加载,与“第二张表”做链接,Id
                        {
                            query.Add(Restrictions.Eq(notself + "Id",df.value));
                            continue;
                        }
  • 相关阅读:
    服务器端事件发送SSE
    Mybatis generator代码生成
    如何靠谱地查到Tomcat的版本
    java自动生成代码
    Java读取excel(兼容03和07格式)
    常见的NoSQL数据库
    任务五 通用类问题相关度计算实现
    任务四 娱乐相关节目和娱乐人物关系代码整理
    任务三 非人物分析判断
    任务二 人物类与娱乐类关联优化分析
  • 原文地址:https://www.cnblogs.com/wukong0214/p/2934161.html
Copyright © 2020-2023  润新知