Dapper学习总结

看了《Dapper从入门到精通》后的总结

 

(1)Dapper 是直接扩展 IDBConnection,而且是单独一个文件,可以直接嵌入到项目中使用。

(2)通过手写sql语句,调用execute方法添加数据,返回的是影响的行数;通过实体,调用insert方法添加数据,返回的是主键值。

 

(3)在IDBconnection中使用事务,主要注意在执行 Insert 方法时传入Transaction,用try...catch捕获异常,并在catch块调用Rollback(否则的话会出现部分提交的情况)。

例:

public bool InsertWithTran()
        {
            using (var conn = Connection)
            {
               int _departmentid = 0, _employeeid = 0,_rnum=0;
                var _departmentname = new t_department { departmentname = "应用开发部ENTITY", introduce = "应用开发部主要开始公司的应用平台" };
                var _employee = new t_employee {displayname = "Micro",email ="1441299@qq.com",loginname ="Micro",password = "66778899",mobile = "123456789"};
                conn.Open();
                var _tran=conn.BeginTransaction();
                try
                {
                    _departmentid=conn.Insert(_departmentname, transaction: _tran).Value;
                    ++_rnum;
                    _employeeid = conn.Insert(_employee, transaction: _tran).Value;
                    ++_rnum;
                    conn.Insert(new t_derelation { departmentid = _departmentid, employeeid = _employeeid }, transaction: _tran);
                    ++_rnum;
                    _tran.Commit();
                }
                catch
                {
                    _rnum = 0;
                    _tran.Rollback();
                }
                return _rnum > 0;
            }
        }
View Code

(4)调用存储过程,要通过DynamicParameters这个类传递参数,再把命令类型赋值为StoredProcedure,然后通过Query调用存储过程。

例:

        public Tuple<string,string> ProceDemo()
        {
            int employeeid = 1;
            var _mobile = "";
            var _dy = new DynamicParameters();
            _dy.Add("employeeid", employeeid);
            _dy.Add("displayname", string.Empty, dbType: DbType.String, direction: ParameterDirection.Output);
            using (var _conn = Connection)
            {
                _conn.Open();
                _mobile= _conn.Query<string>("p_Procedemo", _dy, commandType: CommandType.StoredProcedure).FirstOrDefault();
            }
            return Tuple.Create(_mobile, _dy.Get<string>("displayname"));
        }
View Code

(5)基于SQL查询:使用Query<T>泛型方法;实体直接查询:使用GetList<T>泛型方法。

(6)多表查询,使用QueryMultiple(),可以返回查询中每条sql语句的数据集合。

例:

        public void GetMultiEntity()
        {
            string _sql = "SELECT * FROM t_department AS a;SELECT * FROM t_employee AS a";
            using (var _conn = Connection)
            {
                var _grid = _conn.QueryMultiple(_sql);
                var _department = _grid.Read<t_department>();
                var _employee = _grid.Read<t_employee>();
            }
        }
View Code

(7)Dapper的实体映射:

a. 属性不编辑,用[Editable(false)]这个特性标记

b. 类名到表名的映射,用[Table("tablename")]特性

c. 主键映射,如果有Id属性,默认为主键,否则要添加[Key]特性

posted on 2016-03-17 16:03  雯大侠  阅读(909)  评论(0编辑  收藏  举报

导航