C#中Dapper的使用教程

Dapper是一款轻量级ORM工具(Github),Dapper语法十分简单。并且无须迁就数据库的设计,今天通过本文给大家介绍C# Dapper的使用,感兴趣的朋友一起看看吧


Dapper是一款轻量级ORM工具(Github)。如果你在小的项目中,使用Entity Framework、NHibernate 来处理大数据访问及关系映射,未免有点杀鸡用牛刀。你又觉得ORM省时省力,这时Dapper 将是你不二的选择。

  1. 轻量。只有一个文件SqlMapper.cs,编译后就40K的一个很小的Dll.
  2. 速度快。Dapper的速度接近与IDataReader,取列表的数据超过了DataTable。
  3. 支持多种数据库。Dapper可以在所有Ado.net Providers下工作,包括sqlite, sqlce, firebird, oracle, MySQL, PostgreSQL and SQL Server
  4. 可以映射一对一,一对多,多对多等多种关系。
  5. 性能高。通过Emit反射IDataReader的序列队列,来快速的得到和产生对象,性能不错。
  6. 支持FrameWork2.0,3.0,3.5,4.0,4.5
  7. Dapper语法十分简单。并且无须迁就数据库的设计
  8. // <copyright file="DapperTools.cs" company="PlaceholderCompany">
    // Copyright (c) PlaceholderCompany. All rights reserved.
    // </copyright>
    
    namespace CSharpStudy
    {
        using System;
        using System.Collections.Generic;
        using System.Configuration;
        using System.Data;
        using System.Data.SqlClient;
        using System.Linq;
        using System.Text;
        using System.Threading.Tasks;
        using Dapper;
    
        internal class DapperTools
        {
            public static string ConnectionString = ConfigurationManager.ConnectionStrings["MyStrConn"].ConnectionString;
    
            /// <summary>
            /// 添加.
            /// </summary>
            /// <typeparam name="T">实体类型.</typeparam>
            /// <param name="sql">传入sql执行语句.</param>
            /// <param name="t">传入实体类型.</param>
            /// <returns>int.</returns>
            public static int Add<T>(string sql, T t)
                where T : class
            {
                using (IDbConnection connection = new SqlConnection(ConnectionString))
                {
                    return connection.Execute(sql, t);
                }
            }
    
            /// <summary>
            /// 批量添加.
            /// </summary>
            /// <typeparam name="T">实体类型.</typeparam>
            /// <param name="sql">传入sql执行语句.</param>
            /// <param name="t">传入泛型类.</param>
            /// <returns>int.</returns>
            public static int Add<T>(string sql, List<T> t)
                where T : class
            {
                using (IDbConnection connection = new SqlConnection(ConnectionString))
                {
                    return connection.Execute(sql, t);
                }
            }
    
            /// <summary>
            /// 删除.
            /// </summary>
            /// <typeparam name="T">实体类型.</typeparam>
            /// <param name="sql">传入sql执行语句.</param>
            /// <param name="t">传入实体类型.</param>
            /// <returns>int.</returns>
            public static int Delete<T>(string sql, T t)
                  where T : class
            {
                using (IDbConnection connection = new SqlConnection(ConnectionString))
                {
                    return connection.Execute(sql, t);
                }
            }
    
            /// <summary>
            /// 批量删除.
            /// </summary>
            /// <typeparam name="T">实体类型.</typeparam>
            /// <param name="sql">传入sql执行语句.</param>
            /// <param name="t">传入泛型类.</param>
            /// <returns>int.</returns>
            public static int Delete<T>(string sql, List<T> t)
                  where T : class
            {
                using (IDbConnection connection = new SqlConnection(ConnectionString))
                {
                    return connection.Execute(sql, t);
                }
            }
    
            /// <summary>
            /// 修改.
            /// </summary>
            /// <typeparam name="T">实体类型.</typeparam>
            /// <param name="sql">传入sql执行语句.</param>
            /// <param name="t">传入实体类型.</param>
            /// <returns>int.</returns>
            public static int Update<T>(string sql, T t)
                  where T : class
            {
                using (IDbConnection connection = new SqlConnection(ConnectionString))
                {
                    return connection.Execute(sql, t);
                }
            }
    
            /// <summary>
            /// 批量修改.
            /// </summary>
            /// <typeparam name="T">实体类型.</typeparam>
            /// <param name="sql">传入sql执行语句.</param>
            /// <param name="t">传入泛型类.</param>
            /// <returns>int.</returns>
            public static int Update<T>(string sql, List<T> t)
                  where T : class
            {
                using (IDbConnection connection = new SqlConnection(ConnectionString))
                {
                    return connection.Execute(sql, t);
                }
            }
    
            /// <summary>
            /// 查询.
            /// </summary>
            /// <typeparam name="T">实体类型.</typeparam>
            /// <param name="sql">传入sql执行语句.</param>
            /// <returns>泛型类.</returns>
            public static List<T> Query<T>(string sql)
                 where T : class
            {
                using (IDbConnection connection = new SqlConnection(ConnectionString))
                {
                    return connection.Query<T>(sql).ToList();
                }
            }
    
            /// <summary>
            /// 查询指定数据.
            /// </summary>
            /// <typeparam name="T">实体类型.</typeparam>
            /// <param name="sql">传入sql执行语句.</param>
            /// <param name="t">传入泛型类.</param>
            /// <returns>类.</returns>
            public static T Query<T>(string sql, T t)
                 where T : class
            {
                using (IDbConnection connection = new SqlConnection(ConnectionString))
                {
                    return connection.Query<T>(sql, t).SingleOrDefault();
                }
            }
    
            /// <summary>
            /// 查询的in操作.
            /// </summary>
            /// <typeparam name="T">实体类型.</typeparam>
            /// <param name="sql">传入sql执行语句.</param>
            /// <returns>泛型类.</returns>
            public static List<T> Query<T>(string sql, int[] ids)
                where T : class
            {
                using (IDbConnection connection = new SqlConnection(ConnectionString))
                {
                    return connection.Query<T>(sql, new { ids }).ToList();
                }
            }
    
            /// <summary>
            /// 多语句操作.
            /// </summary>
            /// <typeparam name="T">实体类型.</typeparam>
            /// <param name="sql">传入sql执行语句.</param>
            public static void QueryMultiple(string sql)
            {
                using (IDbConnection connection = new SqlConnection(ConnectionString))
                {
                    var multiReader = connection.QueryMultiple(sql);
                    var userInfo = multiReader.Read<UserInfo>();
                    var student = multiReader.Read<Student>();
    
                    multiReader.Dispose();
                }
            }
        }
    }

    调用举例

  • 7
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
apper是一个轻量级的ORM框架,它可以帮助我们更方便地操作数据库。下面是使用Dapper进行数据库操作的示例代码: 首先,我们需要安装Dapper包。可以通过NuGet包管理器或者在项目添加引用来完成安装。 ```csharp using System.Data.SqlClient; using Dapper; public class DapperHelper<T> { private volatile static DapperHelper<T> _instance = null; private static readonly object lockHelper = new object(); private DapperHelper() { } public static DapperHelper<T> Ins() { if (_instance == null) { lock (lockHelper) { if (_instance == null) { _instance = new DapperHelper<T>(); } } } return _instance; } private string connectionString = "Data Source=.;Initial Catalog=Test;Integrated Security=True"; public List<T> ExecutePro(string proc, object param) { using (SqlConnection con = new SqlConnection(connectionString)) { List<T> list = con.Query<T>( proc, param, null, true, null, CommandType.StoredProcedure).ToList(); return list; } } } ``` 上面的代码,我们定义了一个DapperHelper类,用于封装Dapper的操作。其,ExecutePro方法用于执行存储过程,并返回结果集。 使用Dapper进行数据库操作的步骤如下: 1.创建SqlConnection对象,指定连接字符串。 2.调用Query方法执行SQL语句或存储过程,并将结果集转换为List<T>类型。 下面是一个使用DapperHelper类执行存储过程的示例代码: ```csharp var helper = DapperHelper<MyModel>.Ins(); var list = helper.ExecutePro("GetMyModelList", new { Id = 1 }); ``` 上面的代码,我们首先获取DapperHelper实例,然后调用ExecutePro方法执行存储过程,并将结果集转换为List<MyModel>类型。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值