这里我们自定义一个IServiceCollection的扩展,例如下面我的扩展

services.AddDapperContext(dapperoptions =>
{
dapperoptions.ConnectionString = "Data Source=192.168.0.42;Initial Catalog=NET.Core;User ID=sa;password=lym123!@#;Integrated Security=false";
});

添加了对数据库连接字符串设置,当然你也可以设置更多的参数,委托等等,这里简单演示下自定义dapper下的数据库访问,下面是扩展设置

  public static class DapperMiddlewareExtension
{ public static IServiceCollection AddDapperContext<TDapperContext>(this IServiceCollection serviceCollection, Action<DapperOptions> optionsAction = null, ServiceLifetime contextLifetime = ServiceLifetime.Scoped, ServiceLifetime optionsLifetime = ServiceLifetime.Scoped) where TDapperContext : DapperContext
{
serviceCollection.Configure(optionsAction);
serviceCollection.AddTransient<IDataProvider, SqlServerDataProvider>();
serviceCollection.AddSingleton<TDapperContext>();
return serviceCollection;
}
/// <summary>
/// 添加服务
/// </summary>
/// <param name="serviceCollection"></param>
/// <param name="optionsAction"></param>
/// <param name="contextLifetime"></param>
/// <param name="optionsLifetime"></param>
/// <returns></returns>
public static IServiceCollection AddDapperContext(this IServiceCollection serviceCollection, Action<DapperOptions> optionsAction = null, ServiceLifetime contextLifetime = ServiceLifetime.Scoped, ServiceLifetime optionsLifetime = ServiceLifetime.Scoped)
{
serviceCollection.Configure(optionsAction);
serviceCollection.AddTransient<IDataProvider, SqlServerDataProvider>();
serviceCollection.AddSingleton<DapperContext>();
return serviceCollection;
}

这里DI相关的数据库访问类,这里最终要的一点就是我们在startup中设置的连接的字符串,在数据库DI类中怎么得到来访问数据库呢?

serviceCollection.Configure(optionsAction); 将委托Action配置到IOptions接口中
下面来看下我们的DapperContext
 public class DapperContext
{
DapperOptions _dapperOptions;
IDataProvider _dataProvider;
public DapperContext(IOptions<DapperOptions> options, IDataProvider dataProvider)
{
_dapperOptions = options.Value;
_dataProvider = dataProvider;
} #region 创建Dapper相关连接 private IDbConnection CreateConnection(bool ensureClose = true)
{ var conn = _dataProvider.CreateConnection();
conn.ConnectionString = _dapperOptions.ConnectionString;
conn.Open(); return conn;
}
private IDbConnection _connection;
private IDbConnection Connection
{
get
{
if (_connection == null || _connection.State != ConnectionState.Open)
{
_connection = CreateConnection();
} return _connection;
}
} public void insertTest(string sql)
{ var conn = Connection;
try
{
conn.Execute(sql);
} finally
{
if (_connection != null)
{
_connection.Close();
_connection = null;
}
} }
在写好相关的数据库访问连接类处理
建立自己的业务服务,这里写的比较简单
 public interface ICustomDapperContext
{ void Insert(string sql); }
 public class CustomDapperContext : ICustomDapperContext
{
DapperContext _dapperContext;
public CustomDapperContext(DapperContext dapperContext)
{
_dapperContext = dapperContext;
}
public void Insert(string sql)
{
_dapperContext.insertTest(sql);
}
}
然后在Controller层DI下
ICustomDapperContext _context;
public HomeController(ICustomDapperContext context)
{
_context = context;
}
public IActionResult Index()
{
_context.Insert("insert into Tb_UserLogin(UserName,UserPwd,[Order],IsDelete) values ('UserName','UserName',0,0)");
return View();
}

执行后数据库添加成功

下面是我自定义的中间件的相关类

												

.NETCore Sqlserver下对Dapper的扩展支持的更多相关文章

  1. .Net Framework下对Dapper二次封装迁移到.Net Core2.0遇到的问题以及对Dapper的封装介绍

    今天成功把.Net Framework下使用Dapper进行封装的ORM成功迁移到.Net Core 2.0上,在迁移的过程中也遇到一些很有意思的问题,值得和大家分享一下.下面我会还原迁移的每一个过程 ...

  2. 封装自己的dapper lambda扩展-设计篇

    前言 昨天开源了业务业余时间自己封装的dapper lambda扩展,同时写了篇博文<编写自己的dapper lambda扩展-使用篇>简单的介绍了下其使用,今天将分享下它的设计思路 链式 ...

  3. .Net Core2.0下使用Dapper遇到的问题

    今天成功把.Net Framework下使用Dapper进行封装的ORM成功迁移到.Net Core 2.0上,在迁移的过程中也遇到一些很有意思的问题,值得和大家分享一下.下面我会还原迁移的每一个过程 ...

  4. 【转】.NET(C#):浅谈程序集清单资源和RESX资源 关于单元测试的思考--Asp.Net Core单元测试最佳实践 封装自己的dapper lambda扩展-设计篇 编写自己的dapper lambda扩展-使用篇 正确理解CAP定理 Quartz.NET的使用(附源码) 整理自己的.net工具库 GC的前世与今生 Visual Studio Package 插件开发之自动生

    [转].NET(C#):浅谈程序集清单资源和RESX资源   目录 程序集清单资源 RESX资源文件 使用ResourceReader和ResourceSet解析二进制资源文件 使用ResourceM ...

  5. Net Core2.0下使用Dapper

    Net Core2.0下使用Dapper 今天成功把.Net Framework下使用Dapper进行封装的ORM成功迁移到.Net Core 2.0上,在迁移的过程中也遇到一些很有意思的问题,值得和 ...

  6. sqlserver下调试sql语句

    现在版本的sqlServer已经支持调试功能了,但是在使用的时候用到的却很少(毕竟print习惯了..) 这里做一个笔记,简单的说明一下在sqlserver下调试的方法: declare @i int ...

  7. 【转】在sqlserver下增加MYSQL的链接服务器,实现分布式数据库开发第一步

    首先要在SQLserver上服务器上这装ODBC对mysql的支持,我下载了mysql-connector-odbc-5.1.5-win32.rar,安装后在ODBC中有了DRIVER={MySQL ...

  8. ExtJs4 笔记(2) ExtJs对js基本语法扩展支持

    本篇主要介绍一下ExtJs对JS基本语法的扩展支持,包括动态加载.类的封装等. 一.动态引用加载 ExtJs有庞大的类型库,很多类可能在当前的页面根本不会用到,我们可以引入动态加载的概念来即用即取.这 ...

  9. Linux centos7下php安装cphalcon扩展的方法

    说明: 操作系统:CentOS7 php安装目录:/usr/local/php php.ini配置文件路径:/usr/local/php/etc/php.ini 运行环境:LNMP ,PHP7 .安装 ...

随机推荐

  1. Hadoop生态圈-桶表和分区表

    Hadoop生态圈-桶表和分区表 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.

  2. 数据分析与展示---Matplotlib入门

    简介: 一:Matplotlib库的介绍 (一)简单使用 二:区域划分subplot 三:plot函数 四:pyplot的中文显示 (一)方法一:修改rcParams参数 (二)方法二(推荐),在有中 ...

  3. 转:String StringBuffer StringBuilder区别

    转自:http://www.iteye.com/topic/522167 作者:每次上网冲杯Java时,都能看到关于String无休无止的争论.还是觉得有必要让这个讨厌又很可爱的String美眉,赤裸 ...

  4. 2016/1/2 Python中的多线程(1):线程初探

    ---恢复内容开始--- 新年第一篇,继续Python. 先来简单介绍线程和进程. 计算机刚开始发展的时候,程序都是从头到尾独占式地使用所有的内存和硬件资源,每个计算机只能同时跑一个程序.后来引进了一 ...

  5. [洛谷P3292] [SCOI2016]幸运数字

    洛谷题目链接:[SCOI2016]幸运数字 题目描述 A 国共有 n 座城市,这些城市由 n-1 条道路相连,使得任意两座城市可以互达,且路径唯一.每座城市都有一个幸运数字,以纪念碑的形式矗立在这座城 ...

  6. ZeroMQ API(三) 消息

    1.初始化消息 1.1 zmq_msg_init(3) 1.1.1 名称 zmq_msg_init - 初始化空的ZMQ消息 1.1.2 概要 int zmq_msg_init(zmq_msg_t * ...

  7. Spring Cloud(十一)声名式服务调用:Feign的使用 (上)

    一.写在前边 最近开发任务比较忙,下班也开始锻炼了,这个系列的文章就放了很久,看github我提交的Feign的入门程序已经好久了,今天正好得空,这就更上一贴,准备分几部分写 注意:之前几个项目中,笔 ...

  8. IIS 无法显示网页问题

    今天服务器上的项目突然无法访问,之前也碰到过,都是重启服务器解决的,因为重启IIS无效,另外检查发现w3wp.exe进程正常,其他端口及相关的都没什么问题,最后无奈只能想到用重启来解决了,今天又出现这 ...

  9. windows下用python转换markdown到html

    方法一: 安装markdown, pip install markdown, 安装好后,python -m markdown xxx.md -f xxx.html 方法二:安装markdown2, p ...

  10. HDU 2087 剪花布条 (KMP 不允许重叠的匹配)

    题目链接 Problem Description 一块花布条,里面有些图案,另有一块直接可用的小饰条,里面也有一些图案.对于给定的花布条和小饰条,计算一下能从花布条中尽可能剪出几块小饰条来呢? Inp ...