轻型的ORM类Dapper
Dapper是一个轻型的ORM类。代码就一个SqlMapper.cs文件,主要是IDbConnection的扩展方法,编译后就40K的一个很小的dll。官方站点http://code.google.com/p/dapper-dot-net/ ,也可以通过Nuget进行安装

- Dapper很快。Dapper的速度接近与IDataReader。
- Dapper支持主流数据库 Mysql,SqlLite,Mssql2000,Mssql2005,Oracle等一系列的数据库
- 支持多表并联的对象。支持一对多 多对多的关系,并且没侵入性。
- 原理通过Emit反射IDataReader的序列队列,来快速的得到和产生对象
- Dapper语法十分简单。并且无须迁就数据库的设计
Query()方法:
Query()是IDbConnection扩展方法并且重载了,从数据库里提取信息,并用来填充我们的业务对象模型。
var counters = new List<Tuple<int, PerformanceCounter>>();
using (var conn = new SqlConnection(ConfigurationManager.ConnectionStrings["SqlDiagnosticsDb"].ConnectionString))
{
conn.Open();
string sql = string.Format("select Id,ServiceName,CategoryName,CounterName,InstanceName from service_counters where MachineName='{0}'",machineName);
foreach (var counter in conn.Query<ServiceCounter>(sql))
{
logger.InfoFormat(@"Creating performance counter: {0}\{1}\{2}\{3}", counter.MachineName ?? ".", counter.CategoryName,
counter.CounterName, counter.InstanceName);
var perfCounter = new PerformanceCounter(counter.CategoryName, counter.CounterName, counter.InstanceName, counter.MachineName ?? ".");
counters.Add(new Tuple<int, PerformanceCounter>(counter.Id, perfCounter));
// first value doesn't matter so we should call the counter at least once
try { perfCounter.NextValue(); }
catch { }
}
}下面是ServiceCounter的定义
public class ServiceCounter
{
public int Id { get; set; } public String ServiceName { get; set; } public String MachineName { get; set; }
public String CategoryName { get; set; }
public String CounterName { get; set; }
public String InstanceName { get; set; } public String DisplayName { get; set; } public String DisplayType { get; set; } public override String ToString()
{
return String.Format(@"{0}\{1}\{2}\{3}", MachineName ?? ".", CategoryName, CounterName, InstanceName);
}
}Dapper也可以加载填充嵌套对象,考虑这样一种情形,考虑到新闻的类别属性,返回类别对象。
1,在填充嵌套对象的时候,只好执行ToList<>方法,否则回报ExecuteReader 要求已打开且可用的连接。连接的当前状态为已关闭,而单个对象不会报错,估计是using结束后关闭了连接,而嵌套对象在map的时候又执行了ExecuteReader,只好在using结束之前返回list集合。
2,嵌套对象的参数是比较多的,主要是前两个参数,其它参数没用可以设置为null。特别要注意的是splitOn,这个参数不能为空,否则会报对象为引用的错误。【splitOn参数的意思是读取第二个对象的的分割列,从哪个列起开始读取第二个对象,如果表里的自增长列都为Id,可以设置这个参数为”Id”】.Execute方法:
正如Query方法是检索数据的,Execute方法不会检索数据,它与Query方法非常相似,但它总返回总数(受影响的行数),而不是一个对象集合【如:insert update和delete】.private void SaveServiceSnapshots(IEnumerable<ServiceCounterSnapshot> snapshots)
{
using (var conn = new SqlConnection(ConfigurationManager.ConnectionStrings["SqlDiagnosticsDb"].ConnectionString))
{
conn.Open();
foreach (var snapshot in snapshots)
{
// insert new snapshot to the database
conn.Execute(
@"insert into service_counter_snapshots(ServiceCounterId,SnapshotMachineName,CreationTimeUtc,ServiceCounterValue) values (
@ServiceCounterId,@SnapshotMachineName,@CreationTimeUtc,@ServiceCounterValue)", snapshot);
} }
}ServiceCounterSnapshot的定义如下:
public class ServiceCounterSnapshot
{
public int Id { get; set; } public int ServiceCounterId { get; set; } /// <summary>
/// Machine on which the snapshot was taken.
/// </summary>
public String SnapshotMachineName { get; set; } public DateTime CreationTimeUtc { get; set; } public float? ServiceCounterValue { get; set; }
}
轻型的ORM类Dapper的更多相关文章
- .net平台性能很不错的轻型ORM类Dapper
dapper只有一个代码文件,完全开源,你可以放在项目里的任何位置,来实现数据到对象的ORM操作,体积小速度快. 使用ORM的好处是增.删.改很快,不用自己写sql,因为这都是重复技术含量低的工作,还 ...
- .NET 轻量级 ORM 框架 - Dapper 介绍
Dapper简单介绍: Dapper is a single file you can drop in to your project that will extend your IDbConnect ...
- 基于轻量级ORM框架Dapper的扩展说明
这里简单的介绍一下本人基于Dapper作的一些简单的扩展,供大家参考. 为何要使用这款框架,相信大家看到下面排名就清楚了 其实在各大网站上,我们大概都会看到这样的一个对比效果图,在超过500次poco ...
- ORM之Dapper运用
一.前言 上一篇[分层架构设计]我们已经有了架构的轮廓,现在我们就在这个轮廓里面造轮子.项目要想开始,肯定先得确定ORM框架,目前市面上的ORM框架有很多,对于.net人员来说很容易就想到以ADO.N ...
- ORM之Dapper
ORM之Dapper 一.下载安装: nuget 搜索dapper安装 二.使用: 三.优缺点: 优点: 1.开源.轻量.单文件(代码就一个SqlMapper.cs文件,编译后就40K的一个很小的Dl ...
- Kohana框架ORM类的基本使用
1.首先需要创建一个模型类,以user为例,在application/classes/model/user.php路径下创建user.php,并且一个表对应一个模型,且表名必须在类名后加“S”,即表名 ...
- .NET轻量级ORM框架Dapper入门精通
一.课程介绍 本次分享课程包含两个部分<.NET轻量级ORM框架Dapper修炼手册>和<.NET轻量级ORM框架Dapper葵花宝典>,阿笨将带领大家一起领略轻量级ORM框架 ...
- .NET轻量级ORM组件Dapper葵花宝典
一.摘要 为什么取名叫<葵花宝典>? 从行走江湖的世界角度来讲您可以理解为一本"武功秘籍",站在我们IT编程的世界角度应该叫"开发宝典". 如果您在 ...
- .NET轻量级ORM组件Dapper修炼手册
一.摘要 1.1.为什么叫本次的分享课叫<修炼手册>? 阿笨希望本次的分享课中涉及覆盖的一些小技巧.小技能给您带来一些帮助.希望您在日后工作中把它作为一本实际技能手册进行储备,以备不时之需 ...
随机推荐
- Entity framework code first
EF Code First 不便之处,数据库结构改变时,需要利用程序包管理器控制台生成代码,再用update-database -Verbose更新数据库,这样的做法在很多时候不容易部署.下面介绍一种 ...
- android微信分享要注意的地方
最近在做android端分享的功能,在微信开放平台查看了下官网上的开发文档,一步一步的按文档上的步骤来: 1.申请你的AppID 2.下载开发工具包 3.搭建开发环境,引入libammsdk.jar文 ...
- Delphi编写DLL供C#调用的实例
Delphi中编写的Dll: library TestDLL; { Important note about DLL memory management: ShareMem must be the f ...
- xxx.app已损坏,打不开.你应该将它移到废纸篓 macOS 10.12 Sierra
出现这个问题的解决方法: 修改系统配置:系统偏好设置... -> 安全性与隐私.修改为任何来源 如果没有这个选项的话 (macOS Sierra 10.12) ,打开终端,执行 sudo spc ...
- 外网无法访问本地IIS站点
自己申请了个花生壳动态域名,本来是打算在IIs上建个站点测试一下的,路由器上的端口也配置好了,把80端口指向我本机.域名也通过 ping 测试确实指向了我这里的路由器.但是用这个域名老是访问不了我这个 ...
- U盘FAT32文件系统转换成NTFS文件系统
首先 点击-开始--运行---输入CMD ----输入convert X:/FS:NTFS 其中 X是U盘所在的盘符
- 使用axi_datamover完成ZYNQ片内PS与PL间的数据传输
分享下PS与PL之间数据传输比较另类的实现方式,实现目标是: 1.传输时数据不能滞留在一端,无论是1个字节还是1K字节都能立即发送: 2.PL端接口为FIFO接口: PS到PL的数据传输流程: PS到 ...
- python中string模块
>>> import string >>> string.ascii_letters 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKL ...
- 『c++』 模板(template)--- 参数化多态性
---恢复内容开始--- 题外话: 模板机制的设计和细节是由Bjarne Stroustrup在其1988年10月发表的名为“Parameterized Types for C++”一文中披露的. 引 ...
- PHP大文件存储示例,各种文件分割和合并(二进制分割与合并)
最近要对视频进行上传,由于涉及到的视频非常的大,因此采用的是分片上传的格式,下面是一个简单的例子: split.php <?php $i = 0; //分割的块编号 $fp = fopen(&q ...