Dapper高级玩法1:

数据库中带下划线的表字段自动匹配无下划线的Model字段。

Dapper.DefaultTypeMap.MatchNamesWithUnderscores = true;

备注:

这个对使用Mysql数据库的朋友最有帮助,因为Mysql默认都是小写,一般字段都带下划线,比如:user_name之类。

具体效果如下演示

1,首先创建一张表并插入数据

2,创建Model模型

public class User
{
public int UserID { get; set; } public string UserName { get; set; } public int RoleID { get; set; }
}

3,扩写抽取数据逻辑代码.

select * from [user]

static Program()
{
var config = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true); var data = config.Build();
DapperExtension.DBConnectionString = data.GetConnectionString("DefaultConnection");
} static void Main(string[] args)
{
IDbConnection dbconnection = null; using (dbconnection = dbconnection.OpenConnection())
{
var users = dbconnection.List("select * from [user]", null);
foreach (var user in users)
{
Console.WriteLine($"{user.UserID}-{user.UserName}-{user.RoleID}");
}
} Console.ReadKey();
}

4,无MatchNamesWithUnderscores设置时的数据抽取

没有绑定成功??

这是因为用了Select * from的缘故,取出来的字段是带下划线的与Model的字段不匹配。

5,设置MatchNamesWithUnderscores再次数据抽取

static void Main(string[] args)
{
Dapper.DefaultTypeMap.MatchNamesWithUnderscores = true;
IDbConnection dbconnection = null;
using (dbconnection = dbconnection.OpenConnection())
{
var users = dbconnection.List("select * from [user]", null);
foreach (var user in users)
{
Console.WriteLine($"{user.UserID}-{user.UserName}-{user.RoleID}");
}
} Console.ReadKey();
}

数据绑定成功。

就一句Dapper.DefaultTypeMap.MatchNamesWithUnderscores = true,让我们少写了不少AS语句。

Dapper高级玩法2:

法力无边的Query,由于带有Function功能,可以自由设置模型绑定逻辑。

1,创建两张有关联的表,并填入数据。

2,抽取user和它关联的role数据。

select 1 as table1,T1.*,1 as table2,T2.* from [user] T1 inner join [role] T2 on T1.role_id = T2.role_id

扩展方法:

public static IEnumerable QueryT(this IDbConnection dbconnection, string sql, Func map, object param = null, IDbTransaction transaction = null, string splitOn = "Id")
{
return dbconnection.Query(sql, map, param, transaction, splitOn: splitOn);
}

使用:

static void QueryTest()
{
Dapper.DefaultTypeMap.MatchNamesWithUnderscores = true;
IDbConnection dbconnection = null;
using (dbconnection = dbconnection.OpenConnection())
{
var result = dbconnection.QueryT(
@"select 1 as table1,T1.*,1 as table2,T2.* from [user] T1 inner join [role] T2 on T1.role_id = T2.role_id",
(user, role) =>
{
user.Role = role;
return user;
},
null,
splitOn: "table1,table2"); foreach (var user in result)
{
Console.WriteLine($"{user.UserID}-{user.UserName}-{user.Role.RoleID}-{user.Role.RoleName}");
}
}
Console.ReadKey();
}

成功取到数据。

splitOn解释:模型绑定时的字段分割标志。table1到table2之间的表字段绑定到User,table2之后的表字段绑定到Role。

3,特殊Function逻辑。比如抽取role_id对应的user一览。

select 1 as table1,T1.*,1 as table2,T2.* from [role] T1 left join [user] T2 on T1.role_id = T2.role_id

外部定义了一个字典类型,Query内部模型绑定的时候每次调用Function函数,Function函数中将数据添加到外部字典中,这在复杂数据处理时很有用。

static void QueryTest2()
{
Dapper.DefaultTypeMap.MatchNamesWithUnderscores = true;
IDbConnection dbconnection = null;
using (dbconnection = dbconnection.OpenConnection())
{
Dictionary> dic = new Dictionary>(); dbconnection.QueryT(
@"select 1 as table1,T1.*,1 as table2,T2.* from [role] T1 left join [user] T2 on T1.role_id = T2.role_id",
(role, user) =>
{
if (dic.ContainsKey(role.RoleID))
{
dic[role.RoleID].Add(user);
}
else
{
dic.Add(role.RoleID, new List { user });
} return true;
},
null,
splitOn: "table1,table2"); foreach (var data in dic)
{
Console.WriteLine($"role:{data.Key}");
foreach (var user in data.Value)
{
Console.WriteLine($"user:{user.UserID}-{user.UserName}");
}
}
}
Console.ReadKey();
}

输出结果:

今天就介绍到这,后续有时间再添加其他的玩法,个人比较喜好Dapper这种自由的写法。

轻量级高性能ORM框架:Dapper高级玩法的更多相关文章

  1. .NET轻量级ORM框架Dapper入门精通

    一.课程介绍 本次分享课程包含两个部分<.NET轻量级ORM框架Dapper修炼手册>和<.NET轻量级ORM框架Dapper葵花宝典>,阿笨将带领大家一起领略轻量级ORM框架 ...

  2. 【ASP.NET Core】依赖注入高级玩法——如何注入多个服务实现类

    依赖注入在 ASP.NET Core 中起中很重要的作用,也是一种高大上的编程思想,它的总体原则就是:俺要啥,你就给俺送啥过来.服务类型的实例转由容器自动管理,无需我们在代码中显式处理. 因此,有了依 ...

  3. 【Python基础】random 的高级玩法

    random 模块的高级玩法 1.python 随机产生姓名 方式一: import random xing = [ '赵', '钱', '孙', '李', '周', '吴', '郑', '王', ' ...

  4. Word 查找替换高级玩法系列之 -- 段首批量添加字符

    打开「查找和替换」输入框,按照下图操作: 更多查找替换高级玩法,参看:Word查找替换高级玩法系列 -- 目录篇 未完 ...... 点击访问原文(进入后根据右侧标签,快速定位到本文)

  5. Word 查找替换高级玩法系列之 -- 把论文中的缩写词快速变成目录下边的注释表

    1. 前言 问题:Word写论文如何把文中的缩写快速转换成注释表? 原来样子: 想要的样子: 2. 步骤 使用查找替换高级用法,替换缩写顺序 选中所有文字 打开查找替换对话框,输入以下表达式: 替换后 ...

  6. maven 高级玩法

    maven 高级玩法 标签(空格分隔): maven 实用技巧 Maven 提速 多线程 # 用 4 个线程构建,以及根据 CPU 核数每个核分配 1 个线程进行构建 $ mvn -T 4 clean ...

  7. c# 国内外ORM 框架 dapper efcore sqlsugar freesql hisql sqlserver数据常规插入测试性能对比

    c# 国内外ORM 框架 dapper efcore sqlsugar freesql hisql sqlserver数据常规插入测试性能对比对比 在6.22 号发布了 c# sqlsugar,his ...

  8. 轻量级ORM框架Dapper应用一:Dapper安装

    一.Dapper简介 Dapper是一款轻量级ORM框架,为解决网站访问流量极高而产生的性能问题而构造,主要通过执行TSQL表达式而实现数据库的CQRS. 如果你在项目中遇到性能访问问题,选择Dapp ...

  9. 高性能ORM 框架之 MySqlSugar

    mysql 3.X API地址:  http://www.cnblogs.com/sunkaixuan/p/5987308.html MySqlSugar 1.5 API 一.介简 SqlSugar ...

随机推荐

  1. 状态(State)模式

    状态模式,又称状态对象模式(Pattern of Objects for States),状态模式是对象的行为模式.状态模式允许一个对象在其内部状态改变的时候改变其行为.这个对象看上去就像是改变了它的 ...

  2. jQuery库冲突解决办法

    一次面试中面试官问到jQuery解决怎么冲突?虽然以前看过,但是我已经不记得了. 我的思路就是如果让我来设计,那我就用一个默认值$,不传参数,那就用$,最后就挂载在window.$上,传参数就用传入名 ...

  3. [UWP]不怎么实用的Shape指南:自定义Shape

    1. 前言 这篇文章介绍了继承并自定义Shape的方法,不过,恐怕,事实上,100个xaml的程序员99个都不会用到.写出来是因为反正都学了,当作写个笔记. 通过这篇文章,你可以学到如下知识点: 自定 ...

  4. ZigZag Conversion2015年6月23日

    题目: The string "PAYPALISHIRING" is written in a zigzag pattern on a given number of rows l ...

  5. php原生curl接口的请求

    /** * @desc 接口请求处理 * @date 2017/5/19 11:39 * @param [$url请求的接口地址,$way为false为get请求,true为post请求] * @au ...

  6. Android Weekly Notes Issue #258

    Android Weekly Issue #258 May 21st, 2017 Android Weekly Issue #258 本期内容: 围绕着Google I/O的热潮, 本周的posts除 ...

  7. EM算法原理总结

    EM算法也称期望最大化(Expectation-Maximum,简称EM)算法,它是一个基础算法,是很多机器学习领域算法的基础,比如隐式马尔科夫算法(HMM), LDA主题模型的变分推断等等.本文就对 ...

  8. PHP接口学习

    接口:不同类的共同行为进行定义,然后在不同类中实现不同的功能. 接口的具体语法: 接口是零件可以用多个零件组成一个新东西: 接口本身是抽象的,内部申明的方法也是抽象的: 不用加abstract 一个类 ...

  9. 如何编写Hexo主题

    完成一个Hexo的主题其实很简单,和写静态页面差不多,只是内容部分通过Hexo的变量去获取,而且Hexo还内置了一些辅助函数帮你快速方便地完成繁琐的处理. 起步 在写代码之前要先把项目结构搭建好,一个 ...

  10. Caffe代码分析--crop_layer.cu

    因为要修改Caffe crop layer GPU部分的代码,现将自己对这部分GPU代码的理解总结一下,请大家多多指教! crop layer完成的功能(以matlab的方式表示):A(N,C,H,W ...