.Net开源微型ORM框架测评

什么是ORM?

对象关系映射(英语:Object Relation Mapping,简称ORM,或O/RM,或O/R mapping),是一种程序技术,用于实现面向对象编程语言里不同类型系统的数据之间的转换。从效果上说,它其实是创建了一个可在编程语言里使用的“虚拟对象数据库”。

一般的ORM包括以下四部分:

一个对持久类对象进行CRUD操作的API;

一个语言或API用来规定与类和类属性相关的查询;

一个规定MAPPING METADATA的工具;

一种技术可以让ORM的实现同事务对象一起进行DIRTYCHECKING, LAZY ASSOCIATION FETCHING以及其他的优化操作。

本次对比的.NET ORM框架

1. Entity Framework

官网 https://msdn.microsoft.com/zh-cn/data/ef.aspx

2. Dapper

官网 https://github.com/StackExchange/dapper-dot-net

3. PetaPoco

官网 http://www.toptensoftware.com/petapoco/

对比因素

1. 操作的难易程度

2. 执行的效率

3. 跨数据库的使用

Entity Framework

1.新建C#控制台

2. 使用NuGet引用EF组件

项目引用 右键 管理NuGet程序包 在联机里下载并安装Entity Framework

项目右键 新建 添加 新建项 ADO.NET实体数据模型

我这里的CLN用的是数据库名

添加过以后 有一个实体模型数据向导 选择 从数据库生成 下一步 这里是配置数据库连接 新建连接 将App.Config的实体连接设置为CLNContext

然后又出现一个对话框  -- 您要在模型中包含哪些数据库对象,这里把表勾上,点击完成就OK了,然后会弹出两个警告框,这是因为有两个TT模板需要执行,不用管它,确定就行了,这是出现了Edmx数据库模型关系图

接下来就是进入项目的 Program.cs里面写代码了

static void Main(string[] args)

{

Stopwatch S = new Stopwatch();  //秒表对象 计时

S.Start();

var DBContext = new CLNContext();

foreach (var item in DBContext.NT_Photo)

{

Console.WriteLine(item.PostIP);

}

Console.WriteLine(S.Elapsed);

Console.ReadKey();

}

NT_Photo 表里有600多条数据,这里看到查询的速度还是蛮快的  EF用时5.9秒

Dapper

1.同样新建控制台程序

2. NuGet引用Dapper

Dapper没有EF那么强大,相当于一个SqlHelper,我们需要手动配置连接字符串,这里把刚才EF生成的NT_Photo.cs 模型类,放到项目里面,然后就是就是进入到Program.cs里面写代码了

using System;

using System.Collections.Generic;

using System.Configuration;

using System.Data.SqlClient;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

using Dapper;

using System.Diagnostics;

using System.Threading;

namespace DapperForsql

{

class Program

{

static void Main(string[] args)

{

Stopwatch w = new Stopwatch();

w.Start();

var str = "data source=.;initial catalog=CLN20140830;integrated security=True";

SqlConnection Con = new SqlConnection(str);

var list = Con.Query<NT_Photo>("select * from NT_Photo");

foreach (var item in list)

{

Console.WriteLine(item.PostIP);

}

Console.WriteLine(w.Elapsed);

Console.ReadKey();

}

}

}

我们这里用了SqlConnertion对象,因为Dapper是对IDbConnection做了扩展, SqlConnection是实现了IDbConnection,然后在我们引用Dapper的命名空间using Dapper;

这里可以看到,Dapper比EF更快  Dapper用时3.0秒

PetaPoco

1.同样新建控制台程序

2.使用NuGet引用PetaPoco组件

3.配置App.Config里的连接字符串

<?xml version="1.0" encoding="utf-8" ?>

<configuration>

<connectionStrings>

<add name="CLNContext" connectionString="data source=.;initial catalog=CLN20140830;integrated security=True;" providerName="System.Data.SqlClient" />

</connectionStrings>

<startup>

<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />

</startup>

</configuration>

4. 安装PetaPoco后,同样会自动生成数据库访问上下文和模型Model,这里打开 Models -> Database.tt ,修改 ConnectionStringName = "CLNContext";这里要和App.Config里的连接字符串保持一致,更改过以后保存,会自动生成数据库访问上下文,Models -> Database.tt -> Database.cs

5.准备工作完毕,就是进入正题了,同样进入到 Program.cs

static void Main(string[] args)

{

var Context = new CLNContext.CLNContextDB();

Stopwatch s = new Stopwatch();

s.Start();

var list = Context.Query<NT_Photo>("select * from NT_Photo");

foreach (var item in list)

{

Console.WriteLine(item.PostIP);

}

Console.WriteLine(s.Elapsed);

Console.ReadKey();

}

这里PetaPoco 也有数据库访问上下文CLNContextDB(),不过也是需要写SQL语句的,先看一下查询速度

在这里可以看到,PetaPoco貌似更快 PetaPoco用时2.4秒

其实PetaPoco更强大的是,它对模型做了增删改查的方法,这就非常方便了

NT_Photo PP = new NT_Photo();

var res= PP.Insert();

//res就是返回插入的数据的ID

对比结果:

这里可以看到EF,Dapper,PetaPoco 的差别了

NT_Photo 600多条数据

EF            ------   5.9秒

ORM框架详解的更多相关文章

  1. Android 常用的ORM框架详解

    1. OrmLite OrmLite 不是 Android 平台专用的ORM框架,它是Java ORM.支持JDBC连接,Spring以及Android平台.语法中广泛使用了注解(Annotation ...

  2. jQuery Validate验证框架详解

    转自:http://www.cnblogs.com/linjiqin/p/3431835.html jQuery校验官网地址:http://bassistance.de/jquery-plugins/ ...

  3. mina框架详解

     转:http://blog.csdn.net/w13770269691/article/details/8614584 mina框架详解 分类: web2013-02-26 17:13 12651人 ...

  4. lombok+slf4j+logback SLF4J和Logback日志框架详解

    maven 包依赖 <dependency> <groupId>org.projectlombok</groupId> <artifactId>lomb ...

  5. [Cocoa]深入浅出 Cocoa 之 Core Data(1)- 框架详解

    Core data 是 Cocoa 中处理数据,绑定数据的关键特性,其重要性不言而喻,但也比较复杂.Core Data 相关的类比较多,初学者往往不太容易弄懂.计划用三个教程来讲解这一部分: 框架详解 ...

  6. iOS 开发之照片框架详解(2)

    一. 概况 本文接着 iOS 开发之照片框架详解,侧重介绍在前文中简单介绍过的 PhotoKit 及其与 ALAssetLibrary 的差异,以及如何基于 PhotoKit 与 AlAssetLib ...

  7. Quartz.NET作业调度框架详解

    Quartz.NET作业调度框架详解 http://www.cnblogs.com/lmule/archive/2010/08/28/1811042.html

  8. mapreduce框架详解

    hadoop 学习笔记:mapreduce框架详解 开始聊mapreduce,mapreduce是hadoop的计算框架,我学hadoop是从hive开始入手,再到hdfs,当我学习hdfs时候,就感 ...

  9. iOS 开发之照片框架详解之二 —— PhotoKit 详解(下)

    本文链接:http://kayosite.com/ios-development-and-detail-of-photo-framework-part-three.html 这里接着前文<iOS ...

随机推荐

  1. SqlServer性能优化分割提升性能分布式视图(七)

    分布式视图: 1.将大表分割到多个服务器上存储 2.物理上与逻辑上都存在多个表 3.通过视图实现对分布到多个服务器表进行访问 4.整合网络负载平衡 链接两台数据库: 建立同样的数据结构: create ...

  2. JAVA(2)

    java面向对象编程的四大特征: 1.抽象 2.封装 3.继承 4.多态 封装 //职员 class Clerk { public String name; //private私有的 private ...

  3. 【转】我是如何在SQLServer中处理每天四亿三千万记录的

    原文转自:http://blog.jobbole.com/80395/ 首先声明,我只是个程序员,不是专业的DBA,以下这篇文章是从一个问题的解决过程去写的,而不是一开始就给大家一个正确的结果,如果文 ...

  4. Activity、Task、应用和进程

    http://www.cnblogs.com/franksunny/archive/2012/04/17/2453403.html Activity.Task.应用和进程 为了阅读方便,将文档转成pd ...

  5. ASP.NET收发邮件

    在.NET中常见到在线发邮件的实例,网站加上这个功能可以方便站长与用户的交流. NET 中发邮件有时候会用到IIS组件中的邮件服务器,不过复杂.对虚拟主机的配置也较麻烦, 也可用第三方组件比如Jmai ...

  6. android安全测试 APP要点解析

    评估思路 移动APP面临的威胁 风起云涌的高科技时代,随着智能手机和iPad等移动终端设备的普及,人们逐渐习惯了使用应用客户端上网的方式,而智能终端的普及不仅推动了移动互联网的发展,也带来了移动应用的 ...

  7. (实用篇)php支付宝接口用法分析

    本文实例讲述了php支付宝接口用法.分享给大家供大家参考.具体分析如下: 现在流行的网站支持平台,支付宝当仁不让的老大了,现在我们就来告诉你如何使用支付宝api来做第三方支付,把支付宝放到自己网站来, ...

  8. 升级OpenSSh到 7.3p1

    1.开启 telnet 服务 Linux yum install -y telnet-server telnet /etc/xinet.d/telnet 中的yes 修改为no service xin ...

  9. with as的用法

    ;with T1 as ( select FTP_ID,FTP_NAME,FTP_Server,FTP_Port,FTP_UserID,FTP_Password from FTP_Config wit ...

  10. 一些新的ideas

    k-means可以在不同的聚类点间加入计算该方向类内方差的方法改进,可以获得更好的效果: 可以通过爬虫方法在facebook上爬取与happy.sad相关的图片进行图片情感分类,并通过语义分析的方法提 ...