.NETCore Sqlserver下对Dapper的扩展支持
这里我们自定义一个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的扩展支持的更多相关文章
- .Net Framework下对Dapper二次封装迁移到.Net Core2.0遇到的问题以及对Dapper的封装介绍
今天成功把.Net Framework下使用Dapper进行封装的ORM成功迁移到.Net Core 2.0上,在迁移的过程中也遇到一些很有意思的问题,值得和大家分享一下.下面我会还原迁移的每一个过程 ...
- 封装自己的dapper lambda扩展-设计篇
前言 昨天开源了业务业余时间自己封装的dapper lambda扩展,同时写了篇博文<编写自己的dapper lambda扩展-使用篇>简单的介绍了下其使用,今天将分享下它的设计思路 链式 ...
- .Net Core2.0下使用Dapper遇到的问题
今天成功把.Net Framework下使用Dapper进行封装的ORM成功迁移到.Net Core 2.0上,在迁移的过程中也遇到一些很有意思的问题,值得和大家分享一下.下面我会还原迁移的每一个过程 ...
- 【转】.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 ...
- Net Core2.0下使用Dapper
Net Core2.0下使用Dapper 今天成功把.Net Framework下使用Dapper进行封装的ORM成功迁移到.Net Core 2.0上,在迁移的过程中也遇到一些很有意思的问题,值得和 ...
- sqlserver下调试sql语句
现在版本的sqlServer已经支持调试功能了,但是在使用的时候用到的却很少(毕竟print习惯了..) 这里做一个笔记,简单的说明一下在sqlserver下调试的方法: declare @i int ...
- 【转】在sqlserver下增加MYSQL的链接服务器,实现分布式数据库开发第一步
首先要在SQLserver上服务器上这装ODBC对mysql的支持,我下载了mysql-connector-odbc-5.1.5-win32.rar,安装后在ODBC中有了DRIVER={MySQL ...
- ExtJs4 笔记(2) ExtJs对js基本语法扩展支持
本篇主要介绍一下ExtJs对JS基本语法的扩展支持,包括动态加载.类的封装等. 一.动态引用加载 ExtJs有庞大的类型库,很多类可能在当前的页面根本不会用到,我们可以引入动态加载的概念来即用即取.这 ...
- Linux centos7下php安装cphalcon扩展的方法
说明: 操作系统:CentOS7 php安装目录:/usr/local/php php.ini配置文件路径:/usr/local/php/etc/php.ini 运行环境:LNMP ,PHP7 .安装 ...
随机推荐
- IOS TableView滑动不灵敏问题
TableView的默认的不常用的属性,我们尽量不要去改,如下面标注的几个
- Codeforces Round #477 (rated, Div. 2, based on VK Cup 2018 Round 3) D 贪心
http://codeforces.com/contest/967/problem/D 题目大意: 有n个服务器,标号为1~n,每个服务器有C[i]个资源.现在,有两个任务需要同时进行,令他为x1,x ...
- c# 判断一个数是不是质数或者求一个数的公约数的算法
一个数是不是质数,就是判断一个数除了1和它本身还有没有其他的约数,如果有则是合数,否则是质数.其实本质都是求公约数. 求公约数是什么思路呢,就是找比它小的数不断尝试,能被整除则是其约数,否则继续尝试, ...
- 用pip install升级已安装的包的附加包, 以tabulate包为例
用pip install升级已安装的附加包, 以tabulate包为例 去pypi官网查看tabulate包的介绍, 发现tabulate 0.7.6才开始支持宽字符的美化打印. 而且还需要安装它的附 ...
- anonymous namespace V.S. static variant
[anonymous namespace V.S. static variant] 在C语言中,如果我们在多个tu(translation unit)中使用了同一个名字做为函数名或者全局变量名,则在链 ...
- R8—批量生成文件夹,批量读取文件夹名称+R文件管理系统操作函数
一. 批量生成文件夹,批量读取文件夹名称 今日,工作中遇到这样一个问题:boss给我们提供了200多家公司的ID代码(如6007.7920等),需要根据这些ID号去搜索下载新闻,从而将下载到的新闻存到 ...
- mysql的force index
MSQL中使用order by 有个坑,会默认走order by 后面的索引.而不走where条件里应该走的索引.大家在使用时要绕过此坑. 如下语句因为order by 走了settle_id这个主键 ...
- FPGA基础知识8(FPGA静态时序分析)
任何学FPGA的人都跑不掉的一个问题就是进行静态时序分析.静态时序分析的公式,老实说很晦涩,而且总能看到不同的版本,内容又不那么一致,为了彻底解决这个问题,我研究了一天,终于找到了一种很简单的解读办法 ...
- 天梯 1083 Cantor表
解题报告:发现规律就可以了,斜着看,第一条线上有1个,第二条线上有2个,....然后求出等差数列前n项和,求出N在第几条线上,然后就看N是在这条线上的第几个就可以了. #include<cstd ...
- c++ static静态
在C++中,静态成员是属于整个类的而不是某个对象,静态成员变量只存储一份供所有对象共用.所以在所有对象中都可以共享它.使用静态成员变量实现多个对象之间的数据共享不会破坏隐藏的原则,保证了安全性还可以节 ...