Dapper使用

公司的项目使用了Dapper做数据库连接处理,感觉不错,自己研究一下怎么用。

在网上找了找资料对Dapper都比较推崇。主要是两个方面,一个是连接速度很快,一个是代码开源且简单,只有一个SqlMapper.cs文件,是一个轻型的ORM类。

从这篇博客里面找到它的一些介绍和使用方式,但奈何英文太差,只好自己再做个笔记。http://www.cnblogs.com/yipu/archive/2012/11/21/2780199.html

首先从GitHub上获取Dapper:https://github.com/SamSaffron/dapper-dot-net

下载完了以后,打开工程,有下面的目录

当然这么多都是分版本表示,其实这么多文件就取三个文件就可以了,一个SqlMapper.cs,一个是Database.cs,再加一个扩展属性的类IgnorePropertyAttribute.cs。我用的是.Net4.0 所以我取的 4.0下面的文件,放入我的工程修改其命名空间为我的即可。

 

这个时候我们就可以测试了

 class Program
    {
        static string _strConn = "Data Source=192.168.11.128;Initial Catalog=PD_ShopDB;uid=sa;password=123;";
        static string _strSQL = "SELECT BrandID,BrandName,IsEnable,BrandEnName,BigLogo,SmllLogo,BrandStory,BrandLink,IsDelete,CreateDate  FROM Brands  WITH(NOLOCK)";

        static void Main(string[] args)
        {
            using (SqlConnection connection = new SqlConnection(_strConn))
            {
                connection.Open();
                var brand = connection.Query<Brands>(_strSQL).ToList();
                foreach (var item in brand)
                {
                    Console.Write(item.BrandID + " " + item.BrandName);
                }
            }

            Console.ReadKey();
        }
    }

测试结果

上面是查询,再看一下插入和更新,同样在Dapper源码里面找到SqlMapperExtensions.cs,这个在Dapper.Contrib项目下面,将其添加到自己的工程里面,同样修改其命名空间

然后在测试

class Program
    {
        static string _strConn = "Data Source=192.168.11.128;Initial Catalog=PD_ShopDB;uid=sa;password=123;";
        static string _strSQL = "SELECT BrandID,BrandName,IsEnable,BrandEnName,BigLogo,SmllLogo,BrandStory,BrandLink,IsDelete,CreateDate  FROM Brands  WITH(NOLOCK)";

        static void Main(string[] args)
        {
            using (SqlConnection connection = new SqlConnection(_strConn))
            {
                connection.Open();

                connection.Insert<Brands>(new Brands() { BrandName = "手机", BrandEnName = "Phone", IsEnable = true, CreateDate = DateTime.Now });

                var brands = connection.Query<Brands>(_strSQL).ToList();
                foreach (var item in brands)
                {
                    Console.WriteLine(item.BrandID + " " + item.BrandName );
                }

                var brand = brands.First();
                brand.BrandName = "家用电器";
                connection.Update<Brands>(brand);

                Console.WriteLine("-------------更新后");

                var brands2 = connection.Query<Brands>(_strSQL).ToList();
                foreach (var item in brands2)
                {
                    Console.Write(item.BrandID + " " + item.BrandName);
                }
            }

            Console.ReadKey();
        }
    }

测试结果

OK已经达到要求了,不过在使用的过程中,有一个小问题,就是自增列的处理,原生态的实体类代码中,将自增列声明为[Key],而我自己的用的是Linq的[Columm]

我在KeyPropertiesCache方法中将其进行了修改

 private static List<PropertyInfo> KeyPropertiesCache(Type type)
        {

            IEnumerable<PropertyInfo> pi;
            if (KeyProperties.TryGetValue(type.TypeHandle, out pi))
            {
                return pi.ToList();
            }

            var allProperties = TypePropertiesCache(type);
            // var keyProperties = allProperties.Where(p => p.GetCustomAttributes(true).Any(a => a is KeyAttribute)).ToList();
            //因声明主键的方式不同,对自增列进行排除
            var keyProperties = allProperties.Where(p => p.GetCustomAttributes(true).Any(a => ((a is System.Data.Linq.Mapping.ColumnAttribute))
                                                    && ((System.Data.Linq.Mapping.ColumnAttribute)a).IsPrimaryKey)).ToList();
            if (keyProperties.Count == 0)
            {
                var idProp = allProperties.FirstOrDefault(p => p.Name.ToLower() == "id");
                if (idProp != null)
                {
                    keyProperties.Add(idProp);
                }
            }

            KeyProperties[type.TypeHandle] = keyProperties;
            return keyProperties;
        }

关于Dapper的使用,用官方给的原生态的代码就可以实现了。一般用的时候,框架都会对其进行二次封装,以利于项目的开发。

时间: 2024-08-03 19:30:44

Dapper使用的相关文章

ECommon.Dapper

ECommon.Dapper 轻量级的dapper扩展 我们都知道Dapper这个orm框架,但是我们也知道他的扩展目前没有特别好的,今天我就推荐一个轻量级的很方便使用的一个扩展叫做 ECommon.Dapper,它是ECommon的一个类库,关于ECommon,它是Enode的一个common infrastructure,那么你又有问题了,Enode是啥? 我其实要说是 Dapper,重点是这个.关于Enode,出门左拐=>传送门 一:为什么选择ECommon.Dapper  1. 易用性强

使用dapper进行参数化查询

在使用Dapper操作Mysql数据库中我介绍了使用dapper进行CURD基本操作,但在示例代码中参数虽然也是通过@开头,但其实不是真正意义的参数化查询,而是拼接sql,这种方式不利于防止sql注入,所以在Dappe中可以使用DynamicParameters动态参数集合添加参数,从而实现dapper下的参数化查询: 示例代码 using (var connection = new MySqlConnection(connstr)) { //声明动态参数 DynamicParameters P

.NET轻量级ORM组件Dapper葵花宝典

一.摘要 为什么取名叫<葵花宝典>? 从行走江湖的世界角度来讲您可以理解为一本"武功秘籍",站在我们IT编程的世界角度应该叫"开发宝典". 如果您在工作中主要接触的是操作MySQL数据库,但您又想学习和了解.NET轻量级ORM框架Dapper,那么就请跟着阿笨一起学习本次的分享课<.NET轻量级ORM框架Dapper葵花宝典>.Let's Go,Do It ,Dapper For MySQL! 废话不多说,直接上干货,我们不生产干货,我们只是

Dapper源码讲解

Nuget下载dapper的程序集,浏览公开的方法,如下图所示 主要讲解:Execute方法的调用过程, public static int Execute(this IDbConnection cnn, string sql, object param = null, IDbTransaction transaction = null, int? commandTimeout = null, CommandType? commandType = null) 此方法代码: 内部调用了Execut

[转][Dapper]SQL 经验集

condition.Append(" AND ChineseName like @name"); p.Add("@name", "%" + name + "%", System.Data.DbType.String); like 也可以参数化查询. @a MSSQL 的参数写法 :a Oracle 的参数写法 ? OleDb 的参数写法 Access 中 * 表示模糊匹配 MSSQL / Oracle 中 % 表示模糊匹配 A

02-大鸭梨博客系统数据库设计及Dapper的使用

毫无疑问,数据库的设计在一个系统中起了至关重要的作用.我们都知道,系统设计分为两部分,或者说是两个阶段,即数据库设计和功能设计.构建一个完善的系统需要这两个阶段的充分考量.周密设计.合理联接以及密切配合.数据库设计是整个系统的根基,它关乎系统功能的实现.稳定性.扩展性等多个方面,可见数据库设计的重要性. 那么好的数据库设计应该具备什么样的基本条件呢,大致有这么几点: 1.充分体现系统的需求 不管是数据库设计还是功能设计,我们最终的目的都是要实现客户的业务需求,所以数据库设计的第一准则就是要符合业

ASP .Net Core 使用 Dapper 轻型ORM框架

一:优势 1,Dapper是一个轻型的ORM类.代码就一个SqlMapper.cs文件,编译后就40K的一个很小的Dll. 2,Dapper很快.Dapper的速度接近与IDataReader,取列表的数据超过了DataTable. 3,Dapper支持什么数据库.Dapper支持Mysql,SqlLite,Mssql2000,Mssql2005,Oracle等一系列的数据库,当然如果你知道原理也可以让它支持Mongo db 4,Dapper的r支持多表并联的对象.支持一对多 多对多的关系.并且

Topshelf+Quartz.net+Dapper+Npoi(一)

背景 前段时间公司有个需求(每天给业务导出一批数据,以excel的形式通过邮件发送给他).A说:直接写个服务,判断等于某个时间点,执行一下sql语句,生成excel,写个EmaiHelper发送给他不就得了,这有什么麻烦的?B说:我了个亲娘来,还写服务呢?你还需要搞个timer去判断时间点?多费劲啊,直接写个控制台程序,添加个任务计划,不就搞定了吗?我只想说:你们都是大神,每次都不加点新的东西,还写什么代码,多么没劲啊,前两天看到了topshelf+quartz.net这个东东,可以做个练习了.

EntityFramework、Dapper vs 草根框架性能

EntityFramework.Dapper vs 草根框架性能 扯淡 当前市面上 ORM 很多,有跑车型的,如 Dapper,有中规中矩型的,如 Mybatis.Net,也有重量型的,如 EntityFramework 和 NHibernate,还有一些出自草根之手的,如 Chloe.ORM.各式各样,层出不穷.试问,为何要重复造轮子?很简单,咱来自火星,目前地球上还没一款轮子适合咱这辆火星车~ 为加深对各个 ORM 框架的了解,同时也想看看咱自己的框架性能如何,也可以让对 Chloe 感兴趣

Asp.net 面向接口可扩展框架之数据处理模块及EntityFramework扩展和Dapper扩展(含干货)

面向接口数据处理模块是什么意思呢?实际上很简单,就是使用面向接口的思想和方式来做数据处理. 还提到EntityFramework和Dapper,EntityFramework和Dapper是.net环境下推崇最高的两种ORM工具. 1.EntityFramework是微软出的根正苗红的.netd的ORM工具,直接在Vs工具和Mvc框架中集成了,默认生成的项目就是使用EntityFramework的;微软也一直都在维护更新升级,最新版本最新版本都在EF7了.也迁移到了最新的.net Core平台了