我有这样一个一对一关系的表结构:User->UserInfo
User:
/// <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:
/// <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:
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,他其它是分割子对象的属性。