Dapper 嵌套对象查询

我有这样一个一对一关系的表结构:User->UserInfo

User:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
/// <summary>
   /// 用户
   /// </summary>
   [Serializable]
   public partial class SysUser
   {
       public SysUser()
       {}
       #region Model
       /// <summary>
       /// 用户编号
       /// </summary>
       public string SysId { get; set; }
 
       /// <summary>
       /// 用户名
       /// </summary>
       public string UserName { get; set; }
 
       /// <summary>
       /// 密码
       /// </summary>
       public string UserPwd { get; set; }
 
       /// <summary>
       /// 创建时间
       /// </summary>
       public DateTime? CreateTime { get; set; }
 
       /// <summary>
       /// 最后一次登录时间
       /// </summary>
       public DateTime? LastLogin { get; set; }
 
       /// <summary>
       /// 该条记录的操作情况,用于记录最后一次谁在什么时候创建、修改了该记录
       /// </summary>
       public string RecordStatus { get; set; }
 
       /// <summary>
       /// 用户的详细信息
       /// </summary>
       public SysUserInfo UserInfo { get; set; }
         
       #endregion Model
 
       public IEnumerable<SysRole> Roles { get; set; }
   }

 

UserInfo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
/// <summary>
    /// 用户信息
    /// </summary>
    [Serializable]
    public partial class SysUserInfo
    {
        public SysUserInfo()
        {}
        #region Model
        /// <summary>
        /// 用户编号
        /// </summary>
        public string SysId { get; set; }
 
        /// <summary>
        /// 真实名字
        /// </summary>
        public string RealName { get; set; }
 
        /// <summary>
        /// 职位
        /// </summary>
        public string Title { get; set; }
 
        /// <summary>
        /// 性别
        /// </summary>
        public bool Sex { get; set; }
 
        /// <summary>
        /// 手机
        /// </summary>
        public string Phone { get; set; }
 
        /// <summary>
        /// 传真
        /// </summary>
        public string Fax { get; set; }
 
        /// <summary>
        /// 邮箱
        /// </summary>
        public string Email { get; set; }
 
        /// <summary>
        /// qq
        /// </summary>
        public string QQ { get; set; }
 
        /// <summary>
        /// 地址
        /// </summary>
        public string Address { get; set; }
 
        #endregion Model
 
    }

 

 

查询的具体Sql:

1
2
3
4
select u.CreateTime,u.LastLogin,u.RecordStatus,u.SysId,u.UserName,u.UserPwd,ui.SysId,
       ui.Address,ui.Email,ui.Fax,ui.Phone,ui.QQ,ui.RealName,ui.Sex,ui.Title
from Sys_User u inner join Sys_UserInfo ui on u.SysId=ui.SysId inner join Sys_UserRole ur on
u.SysId=ur.UserId inner join Sys_Role r on ur.RoleId = r.SysId

 

要想把UserInfo的数据填充到User中,需要用下面的方式实现:

connection.Query<SysUser, SysUserInfo, SysUser>(
                    Constant.ProcGetList,
                    (u, ui) =>
                        {
                            u.UserInfo = ui;
                            return u;
                        },
                        p,splitOn:"SysId",
                    commandType: CommandType.StoredProcedure);

 

 

此处要注意的就是splitOn,他其它是分割子对象的属性。

posted @   吉桂昕  阅读(1932)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示