AutoMapper 联合查询映射问题

问题遇到的现象和发生背景

项目中经常遇到列表分页数据展示的业务,比如学生信息列表,它包括的学生姓名、所属班级、学籍号、联系方式、家庭地址等信息,一般我们会设计两张表,学生信息表和班级表,学生所属班级通过学生信息表保存的班级ID关联,列表显示时通过班级ID显示所属班级的名称。表结构(简化)和界面显示如下:
学生表结构:

img


班级表结构:

img


列表显示界面:

img

分页列表模型(当然这里应该是个集合,我只截图出集合中的对象模型):

public class StudentGridViewModel
    {
        /// <summary>
        /// ID
        /// </summary>
        public string ID { get; set; }

        /// <summary>
        /// 姓名
        /// </summary>
        public string UserName { get; set; }

        /// <summary>
        /// 账户;与学籍辅号一致。
        /// </summary>
        public string UserCode { get; set; }
         ....

        #region 扩展字段

        public string ClassName { get; set; }


        #endregion
    }

在没有接触AutoMapper前,我一般时通过SQL语句进行联合查询出列表的模型字段:

select T.*,C.ClassName from EIC_Student as T
join EIC_Class as C on C.ID=T.ClassID

最后模型装载数据后返回给页面使用,在初步了解AutoMapper后,我改为各自查询数据并返回表数据库表模型,也就是分别查询学生信息表和班级信息表:
学生数据库表模型:

/// <summary>
    /// 学生信息
    /// </summary>
    [Serializable]
    public class EIC_Student
    {
        /// <summary>
        /// ID
        /// </summary>
        public string ID { get; set; }

        /// <summary>
        /// 姓名
        /// </summary>
        public string UserName { get; set; }
          ...
    }
}

班级信息表数据库模型:

 public partial class EIC_Class

    {
        public EIC_Class()
        { }

        #region Model

        private string _id;
        private string _classname;
         ...
        /// <summary>
        ///
        /// </summary>
        public string ID
        {
            set { _id = value; }
            get { return _id; }
        }

        /// <summary>
        /// 班级名称
        /// </summary>
        public string ClassName
        {
            set { _classname = value; }
            get { return _classname; }
        }
        ....
    }

然后将学生数据库信息表模型(EIC_Student)映射为StudentGridViewModel,目前到达这一步没有问题,最后我想将班级信息表数据库模型(EIC_Class)的ClassName映射给StudentGridViewModel的ClassName,但失败了,AutoMapper默认会将两个模型相同字段名称都进行映射,这造成了原先EIC_Student映射给StudentGridViewModel的值全部为空了,只保留了ClassName和ID有值(班级信息表和StudentGridViewModel之间ID和ClassName相同,且其实这个ID值是EIC_Class的ID值也是不对)。
我不知道如何处理这种,无耐之下我暂时的处理方式是循环StudentGridViewModel的每一项(其实是个列表多条数据需要循环),赋值ClassName:

img

业务逻辑层的代码:

img

我不知道AutoMapper的使用是否是这样处理以上场景的(联合查询),个人初涉该组件,认为按照AutoMapper的约定所有数据库返回都应该为数据库最原始的模型,然后通过映射为客户端要使用的模型,不应该有联合查询语句。(不知道理解是否有误)!

问题
  1. 是否所有数据库返回的都应该是数据库表实体,不应该使用联合查询,再使用AutoMapper进行映射?
  2. 如果问题1成立,那么如何只映射ClassName?如果问题1不对请赐教!

参考下

https://www.cnblogs.com/springsnow/p/13914972.html

如果将查询出来的用户数据列表缓存下来,就不需要多次查询了呀,只是内存操作了,速度就不会很慢。可以使用一对多映射,也可以将Name属性设置成只读,然后自动跟ID从缓存的用户数据列表中取到用户名称。