Enterprise Library 5 数据访问之二、自定义RowMapper使用

一、应用场景:

由于数据库设计和对象设计并不是一对一的,有时候一张数据表可以拆出多个对象来表述该数据表信息,也有时候多个数据表的某些字段被提取出来对应一个业务对象,这时候自定义RowMapper就有了用武之地。

二、演示代码:

创建一张数据表:User表

if exists (select 1
            from  sysobjects
           where  id = object_id('"User"')
            and   type = 'U')
   drop table "User"
go

create table "User" (
   Id                   int                  identity,
   Name                 nvarchar(50)         null,
   Pwd                  nvarchar(50)         null,
   constraint PK_USER primary key (Id)
)
go
创建一个业务实体对象UserInfo:

public class UserInfo
    {
        public int Id { set; get; }
        public string T_UserName { set; get; }
        public string T_Password { set; get; }
    }   
小提示:注意User表和UserInfo对象并非一 一对应哦

现在我们创建一个自定义的 UserInfoMap

 public class UserInfoMap : IRowMapper<UserInfo>
    {
        public UserInfo MapRow(IDataRecord row)
        {
            UserInfo u = new UserInfo() { Id = int.Parse(row.GetString(0)), T_UserName=row.GetString(1), T_Password=row.GetString(2) };
            return u;
        }
    }
 自定义数据映射工作已经做完,现在我们去看如何使用我们自定义的RowMapper,贴上核心代码如下:

  /// <summary>
        /// 获取单个对象数据
        /// </summary>
        /// <param name="id">Id</param>
        /// <returns></returns>
        public UserInfo GetUserInfo(int id)
        {           
            string cmdText = string.Format("select * from UserInfo where id={0}", id);
            var accrssor = db.CreateSqlStringAccessor(cmdText, new UserInfoMap());
            var customerData = accrssor.Execute();
            return customerData.FirstOrDefault<UserInfo>();
        }
        /// <summary>
        /// 获取一个对象集合数据
        /// </summary>
        /// <returns></returns>
        public List<UserInfo> GetUserList()
        {
            string cmdText = "select * from UserInfo";
            var accrssor = db.CreateSqlStringAccessor<UserInfo>(cmdText, new UserInfoMap());//MapBuilder<UserInfo>.BuildAllProperties()
            var data = accrssor.Execute();
            return data.ToList<UserInfo>();
        }

注意:红色字体标记的既是应用了自定义RowMap地方

补充:或者放弃自定义RowMapper可以这样写

        public UserInfo GetUserInfo(int id)
        {           
            string cmdText = string.Format("select * from UserInfo where id={0}", id);
            var accrssor = db.CreateSqlStringAccessor(cmdText,
                MapBuilder<UserInfo>.MapAllProperties()             
                .Map(x => x.UserName).ToColumn("UserName")
                .Map(x => x.Password).ToColumn("Password")
                .Build()
                );
            var customerData = accrssor.Execute();
            return customerData.FirstOrDefault<UserInfo>();
        }


                                                                                                                                                                                                                                                               


                                                                                                                                                                                                                                                        至此结束。欢迎拍砖.........

                                                                                                                                                                                                                                                                                          






  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值