码迷,mamicode.com
首页 > 移动开发 > 详细

Dapper使用

时间:2016-08-27 00:26:33      阅读:681      评论:0      收藏:0      [点我收藏+]

标签:

 

公司的项目使用了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的使用,用官方给的原生态的代码就可以实现了。一般用的时候,框架都会对其进行二次封装,以利于项目的开发。

Dapper使用

标签:

原文地址:http://www.cnblogs.com/liangxiaofeng/p/5812037.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!