Dapper应用

1.Dapper是什么

Dapper是一款轻量级ORM工具。如果你在小的项目中,使用Entity Framework、NHibernate 来处理大数据访问及关系映射,未免有点杀鸡用牛刀。你又觉得ORM省时省力,这时Dapper 将是你不二的选择。

2.为什么使用

  1. 轻量,编译完成之后只有120k(好象是变胖了)
  2. 速度快。Dapper的速度接近与IDataReader,取列表的数据超过了DataTable。
  3. 支持多种数据库。Dapper可以在所有Ado.net Providers下工作,包括sqlite, sqlce, firebird, oracle, MySQL, PostgreSQL and SQL Server
  4. 可以映射一对一,一对多,多对多等多种关系。
  5. 性能高。通过Emit反射IDataReader的序列队列,来快速的得到和产生对象,性能不错。
  6. 支持FrameWork2.0,3.0,3.5,4.0,4.5

3.使用Dapper.Net并演示

1. 使用Sqlserver创建测试表

2.创建winform应用程序,引用Dapper封装基础应用和框架

3.创建简单页面实现CRUD

4.开始实现

4.1创建表

CREATE DATABASE test
USE test
GO
CREATE TABLE Test
(
testId INT PRIMARY KEY IDENTITY,
testName VARCHAR(50) NULL
) INSERT INTO Test VALUES ('CallmeYhz') INSERT INTO Test VALUES('周公瑾')

4.2实体

  public class Test
{
public int testId { get; set; }
public string testName { get; set; }
}

4.3 Nuget包

4.4 封装搭建

该类实现接口

    public interface IDaoBase<T, TKey> where T : class
{
int Count(IPredicate predicate, bool buffered = false);
bool Delete(IPredicate predicate);
bool DeleteByID(TKey key);
bool DeleteByIDList(Expression<Func<T, object>> expression, IEnumerable<TKey> idList);
int Execute(string sql, dynamic param = null);
bool Exists(string sql, dynamic param = null, bool buffered = false);
IEnumerable<TReturn> Get<TFirst, TSecond, TReturn>(string sql, Func<TFirst, TSecond, TReturn> map, dynamic param = null, IDbTransaction transaction = null, bool buffered = true, string splitOn = "Id", int? commandTimeout = null);
IList<T> GetAll();
T GetByID(TKey key);
IEnumerable<T> GetByIDList(Expression<Func<T, object>> expression, IEnumerable<TKey> idList, bool buffered = false);
T GetEntity(IPredicate predicate, bool buffered = false);
T GetEntity(string sql, object param, bool buffered = false);
PagedList<T> GetEntityPageList(SearchBase search);
IList<T> GetList(IPredicate predicate = null, IList<ISort> sort = null, bool buffered = false);
IList<T> GetList(string sql, object param = null, bool buffered = true);
IList<TEntity> GetList<TEntity>(string sql, object param = null, bool buffered = true);
SqlMapper.GridReader GetMultiple(string sql, dynamic param = null, IDbTransaction transaction = null, int? commandTimeout = null, CommandType? commandType = null);
TScale GetScale<TScale>(string sql, dynamic param = null, bool buffered = false);
dynamic Insert(T entity);
void InsertBatch(IEnumerable<T> entityList, IDbTransaction transaction = null);
bool Update(T entity);
void UpdateBatch(IEnumerable<T> entityList);
}

数据连接工厂

  public class ConnectionFactory
{
/// <summary>
/// 数据库连接
/// </summary>
public static string ConnectionString { set; get; } /// <summary>
/// 数据库类型
/// </summary>
public static DatabaseType DataBaseType { set; get; } /// <summary>
/// 初始化
/// </summary>
/// <param name="conectionString">连接串</param>
/// <param name="dataBaseType">数据库类型</param>
public static void Init(string conectionString, DatabaseType dataBaseType = DatabaseType.SqlServer)
{
ConnectionFactory.ConnectionString = conectionString;
ConnectionFactory.DataBaseType = dataBaseType;
} /// <summary>
/// 创建数据库连接
/// </summary>
/// <returns></returns>
public static IDbConnection CreateConnection()
{
IDbConnection connection = null; switch (ConnectionFactory.DataBaseType)
{
case DatabaseType.SqlServer:
connection = new SqlConnection(ConnectionFactory.ConnectionString);
break; } return connection;
}
}
 public class TestDao : DaoBase<Test,int>
{
/// <summary>
/// 获取所有数据
/// </summary>
/// <returns></returns>
public IList<Test> GetAllList()
{
string sql = @"
SELECT*FROM Test";
return this.GetList<Test>(sql);
} /// <summary>
/// 根据名称获取实体
/// </summary>
/// <param name="name"></param>
/// <returns></returns>
public Test GetByName(string name)
{
string sql = @"
SELECT*FROM Test WHERE testName=@testName";
return this.GetEntity(sql, new { testName = name });
} }

构造一个简单Winform界面

配置数据库连接字符串并且初始化

<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
</startup>
<connectionStrings>
<!-- 测试 -->
<add name="db" connectionString=" Data Source=.;Initial Catalog=test;Integrated Security=SSPI; " /> </connectionStrings>
</configuration>
     //初始化数据库连接
ConnectionFactory.Init(ConfigurationManager.ConnectionStrings["db"].ConnectionString);

4.5演示

Dapper.Net 应用的更多相关文章

  1. Dapper逆天入门~强类型,动态类型,多映射,多返回值,增删改查+存储过程+事物案例演示

    Dapper的牛逼就不扯蛋了,答应群友做个入门Demo的,现有园友需要,那么公开分享一下: 完整Demo:http://pan.baidu.com/s/1i3TcEzj 注 意 事 项:http:// ...

  2. Dapper扩展之~~~Dapper.Contrib

    平台之大势何人能挡? 带着你的Net飞奔吧!http://www.cnblogs.com/dunitian/p/4822808.html#skill 上一篇文章:Dapper逆天入门~强类型,动态类型 ...

  3. 由Dapper QueryMultiple 返回数据的问题得出==》Dapper QueryMultiple并不会帮我们识别多个返回值的顺序

    异常汇总:http://www.cnblogs.com/dunitian/p/4523006.html#dapper 今天帮群友整理Dapper基础教程的时候手脚快了点,然后遇到了一个小问题,Dapp ...

  4. Dapper.Contrib:GetAsync<T> only supports an entity with a [Key] or an [ExplicitKey] property

    异常处理:http://www.cnblogs.com/dunitian/p/4523006.html#dapper 原来Model是这样滴 修改后是这样滴 注意点:Model里面的Table和Key ...

  5. Dapper where Id in的解决方案

    简单记一下,一会出去有点事情~ 我们一般写sql都是==>update NoteInfo set NDataStatus=@NDataStatus where NId in (@NIds) Da ...

  6. ASP.NET Core 1.0 使用 Dapper 操作 MySql(包含事务)

    操作 MySql 数据库使用MySql.Data程序包(MySql 开发,其他第三方可能会有些问题). project.json 代码: { "version": "1. ...

  7. Asp.Net Core + Dapper + Repository 模式 + TDD 学习笔记

    0x00 前言 之前一直使用的是 EF ,做了一个简单的小项目后发现 EF 的表现并不是很好,就比如联表查询,因为现在的 EF Core 也没有啥好用的分析工具,所以也不知道该怎么写 Linq 生成出 ...

  8. 搭建一套自己实用的.net架构(3)续 【ORM Dapper+DapperExtensions+Lambda】

    前言 继之前发的帖子[ORM-Dapper+DapperExtensions],对Dapper的扩展代码也进行了改进,同时加入Dapper 对Lambda表达式的支持. 由于之前缺乏对Lambda的知 ...

  9. mono for android中使用dapper或petapoco对sqlite进行数据操作

    在mono for android中使用dapper或petapoco,很简单,新建android 类库项目,直接把原来的文件复制过来,对Connection连接报错部分进行注释和修改就可以运行了.( ...

  10. Dapper:The member of type SeoTKD cannot be used as a parameter Value

    异常汇总:http://www.cnblogs.com/dunitian/p/4523006.html#dapper 上次说了一下Dapper的扩展Dapper.Contrib http://www. ...

随机推荐

  1. class.c 添加中文注释(2)

    /* Class Device Stuff */ int class_device_create_file(struct class_device * class_dev, const struct ...

  2. postgreSQL使用

    1.1. 安装     自然,在你想开始使用 PostgreSQL 之前, 你必须安装它.PostgreSQL 很有可能 已经安装到你的节点上了,因为它包含在你的操作系统的发布里, 或者是系统管理员已 ...

  3. WSTMall网站系统最新官方版

    WSTMall V1.0是在thinkphp 的经典版本3.2.2基础上进行优化开发的, TP 3.2.2不是thinkphp的一个最新的版本,却是thinkphp最金典的一个版本,正所谓站在巨人的肩 ...

  4. lmap

    1.lamp组件安装 sudo apt-get install apache2 sudo apt-get install php5 sudo apt-get install mysql-server ...

  5. Linux 使用iftop命令查看服务器流量

    简介 iftop是类似于linux下面top的实时流量监控工具. iftop可以用来监控网卡的实时流量(可以指定网段).反向解析IP.显示端口信息等,详细的将会在后面的使用参数中说明. 安装 # yu ...

  6. [WPF系列]-数据邦定之DataTemplate 对分层数据的支持

    到目前为止,我们仅讨论如何绑定和显示单个集合. 某些时候,您要绑定的集合包含其他集合. HierarchicalDataTemplate 类专用于 HeaderedItemsControl 类型以显示 ...

  7. monkey之monkey简介

    1.Monkey 是什么 Monkey是Android中的一个命令行工具,可以运行在模拟器里或实际设备中.它向系统发送伪随机的用户事件流(如按键输入.触摸屏输入.手势输入等),实现对正在开发的应用程序 ...

  8. 《InsideUE4》-4-GamePlay架构(三)WorldContext,GameInstance,Engine

    Tags: InsideUE4 UE4深入学习QQ群: 456247757 引言 前文提到说一个World管理多个Level,并负责它们的加载释放.那么,问题来了,一个游戏里是只有一个World吗? ...

  9. nodejs express 静态文件的路径

    当express 设置为静态文件服务器的时候.可以通过2种方式进行方位: 1,通过设置app.use('路径1','../a/b/image') express 路径的形式,如 src="路 ...

  10. Unity3D 预设打包的注意事项

    在平时的开发中,把预设打包成 assetbundle 文件是非常普遍的做法,但是我们不能随便把预设打包成 assetbundle 就算完事,我们应该先清楚把预设打包成 assetbundle 的目的, ...