首页 > 其他分享 >.net core使用Dapper

.net core使用Dapper

时间:2023-07-16 20:56:41浏览次数:41  
标签:core Configuration IDapper System Dapper using net null public

一、记录一下.NET core API下使用dapper的方法。

1. 引入两个Nuget包:

Dapper 这个是dapper的主要引用包
System.Data.SqlClient  这个包主要是用来使用SQL Server的时候使用的,如果是使用MySQL,就不能使用这个。

2. 添加配置文件:

"ConnectionStrings": {"DefaultConnection": "Server=106.55.75.66,1433;database=StudentID;uid=sa;pwd=qwe20211114;Pooling=True;Max Pool Size=13772000;Connect Timeout=300;"
  },

3. 创建读取Config类

using Microsoft.Extensions.Configuration;

namespace zhcx.Common
{
    public class DataBaseConfig
    {
        private string sqlserverconnectionstring;
        public string SqlServiceconnectionstring
        {
            get { return sqlserverconnectionstring; }
        }
        public DataBaseConfig(IConfiguration Configuration)
        {
            sqlserverconnectionstring = Configuration.GetConnectionString("DefaultConnection");
        }
    }
}

4. 封装Dapper使用类

using Dapper;
using Microsoft.Extensions.Configuration;
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Threading.Tasks;

namespace zhcx.Common
{
    public class SQLDapperHelper : IDapper
    {
        public static IConfiguration _Configuration { get; set; }
        public string _connectionString;
        public SQLDapperHelper(IConfiguration Configuration)
        {
            _Configuration = Configuration;
            /// 数据库连接字符串
            _connectionString = new DataBaseConfig(_Configuration).SqlServiceconnectionstring;
        }
        private IDbConnection _connection { get; set; }
        public IDbConnection Connection
        {
            get
            {
                if (_connection == null || _connection.State == ConnectionState.Closed)
                {
                    _connection = new SqlConnection(_connectionString);
                }
                return _connection;
            }
        }
        /// 获取数据列表
        public List<T> QueryList<T>(string cmd, object param, CommandType? commandType = null, bool beginTransaction = false) where T : class
        {
            try
            {
                return Execute((conn, dbTransaction) =>
                {
                    return conn.Query<T>(cmd, param, dbTransaction, commandType: commandType ?? CommandType.Text).ToList();
                }, beginTransaction);
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
        }
        /// 异步获取数据列表
        public async Task<IEnumerable<T>> QueryAsync<T>(string cmd, object param = null, CommandType? commandType = null, IDbTransaction transaction = null) where T : class
        {
            try
            {
                using (IDbConnection conn = Connection)
                {
                    return await conn.QueryAsync<T>(cmd, param, transaction, commandType: commandType ?? CommandType.Text);
                }
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
        }
        private T Execute<T>(Func<IDbConnection, IDbTransaction, T> func, bool beginTransaction = false, bool disposeConn = true)
        {
            IDbTransaction dbTransaction = null;
            if (beginTransaction)
            {
                Connection.Open();
                dbTransaction = Connection.BeginTransaction();
            }
            try
            {
                T reslutT = func(Connection, dbTransaction);
                dbTransaction?.Commit();
                return reslutT;
            }
            catch (Exception ex)
            {
                dbTransaction?.Rollback();
                Connection.Dispose();
                throw ex;
            }
            finally
            {
                if (disposeConn)
                {
                    Connection.Dispose();
                }
            }
        }
    }
}

5. 提供对外的接口

using System.Collections.Generic;
using System.Data;
using System.Threading.Tasks;

namespace zhcx.Common
{
    public interface IDapper
    {
        /// 获取数据列表
        List<T> QueryList<T>(string cmd, object param, CommandType? commandType = null, bool beginTransaction = false) where T : class;
        ///异步获取数据列表
        Task<IEnumerable<T>> QueryAsync<T>(string cmd, object param = null, CommandType? commandType = null, IDbTransaction transaction = null) where T : class;
    }
}

6. 最最最重要的注入

 services.AddControllers();
            #region dapper
            services.AddScoped<IDapper, SQLDapperHelper>();
            #endregion

7. 使用Dapper

//程序中注入 
private readonly IConnectionMultiplexer _redis;
        public IDapper _IDapper;
        public StatisticalServices(IConnectionMultiplexer redis, IDapper IDapper)
        {
            _redis = redis;
            _IDapper = IDapper;
        }
// 方法中使用
string getmaxIdsql = "SELECT max(Id) maxid FROM RB_Amazon_product_base(NOLOCK) WHERE CustomerID=1 AND IsOffShelf=0 AND IsDelete=0 ";
            var maxdts = _IDapper.QueryList<string>(getmaxIdsql, null);

 

以上就是相关的使用,谢谢学习!!!共同进步

标签:core,Configuration,IDapper,System,Dapper,using,net,null,public
From: https://www.cnblogs.com/wangjinya/p/17558522.html

相关文章

  • .net 实现数组拼接成sql语句IN
    一、简单记录一下.net实现字符串数组拼接成sql语句IN把0001|ceshi04|ceshi0F|ceshi0J变成‘0001’,‘ceshi04’,‘ceshi0F’格式List<string>joinCodeList=model.SJoinList.Split('|').ToList();stringcaseSql=joinCodeList.Aggregate("",(current,s)=>cu......
  • ASP.NET Core学习笔记
    ASP.NETCore教程:https://www.bilibili.com/video/BV1Kk4y117Xy/?p=2&spm_id_from=pageDriver&vd_source=34dc5215532143d76607ef8957c72691的笔记ASP.NETCore启动流程ASP.NETCoreWeb应用程序最初作为控制台应用程序启动,Main()方法是应用程序的入口点。因此,当我们执行AS......
  • ASP.NET Core Web API中操作方法中的参数来源
    在ASP.NETCoreWebAPI中,有多种方式可以传递参数给操作方法。以下是一些常见的参数传递方式:路由参数(RouteParameters):参数值从URL的路由中提取。//Route:api/users/{id}[HttpGet("api/users/{id}")]publicIActionResultGetUserById(intid){//使用id执行操作......
  • 【IP】vivado中IP核的Core Container特性
    一、XCI和XCIX格式文件在Vivado中生成IP核时,一般默认是对应的IP核文件夹会生成在工程目录的.srcs/sources_1/ip路径下。这个文件夹包含了所有与该IP核相关的文件,最主要的是XCI文件,其中包含了用户配置的相关信息。 Vivado还提供了CoreContainer特性,可以将所有与IP相关的文件......
  • 揭秘 .NET 中的 TimerQueue(上)
    前言TimerQueue是.NET中实现定时任务的核心组件,它是一个定时任务的管理器,负责存储和调度定时任务。它被用于实现很多.NET中的定时任务,比如System.Threading.Timer、Task.Delay、CancellationTokenSource等。笔者将用两篇文章为大家介绍TimerQueue的实现原理,本篇文章将以......
  • kubernetes之 dashboard展示
    第十一dashboard展示一直使用kubectl命令操作apiserver实现dashboard作为k8s核心附件存在的,官网部署:https://github.com/kubernetes/dashboard根据教程,还是安装老版本的镜像吧[root@k8s-masterdashboard]#kubectlapply-fhttps://raw.githubusercontent.com/kubernetes/dashb......
  • funcontain_network
    Function介绍、定义组织好的(提前写好内置)、可重复使用的、用以实现特定功能的代码段。str1="iloveu"str2="goodluck"str3="seeya"count=0foriinstr1:count+=1print(f"字符串{str1}的长度是{count}")#将for写三次分别对应str1、2、3重复的代码过多,......
  • dotnet 连接使用ef orm连接sqlite数据库的小demo
    EF6SQLiteTutorial/Program.csusingEF6SQLiteTutorial.Data;usingMicrosoft.EntityFrameworkCore;varbuilder=WebApplication.CreateBuilder(args);//Addservicestothecontainer.builder.Services.AddControllers();//LearnmoreaboutconfiguringSwag......
  • dotnet ef的使用
    EntityFrameworkCore的使用如果您想要根据模型创建数据库表,可以使用EntityFrameworkCore的迁移功能。迁移允许您在模型更改时更新数据库架构,而无需手动创建或修改表。要使用迁移,您需要执行以下步骤:安装Microsoft.EntityFrameworkCore.Tools包,以便在命令行中使用dotnet......
  • .NET面试题系列(23)tcp粘包问题
    序言 什么是粘包所谓粘包问题主要还是因为接收方不知道消息之间的界限,不知道一次性提取多少字节的数据所造成的。解决粘包问题的方法 资料tcp粘包问题......