ORM框架详解
.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框架详解的更多相关文章
- Android 常用的ORM框架详解
1. OrmLite OrmLite 不是 Android 平台专用的ORM框架,它是Java ORM.支持JDBC连接,Spring以及Android平台.语法中广泛使用了注解(Annotation ...
- jQuery Validate验证框架详解
转自:http://www.cnblogs.com/linjiqin/p/3431835.html jQuery校验官网地址:http://bassistance.de/jquery-plugins/ ...
- mina框架详解
转:http://blog.csdn.net/w13770269691/article/details/8614584 mina框架详解 分类: web2013-02-26 17:13 12651人 ...
- lombok+slf4j+logback SLF4J和Logback日志框架详解
maven 包依赖 <dependency> <groupId>org.projectlombok</groupId> <artifactId>lomb ...
- [Cocoa]深入浅出 Cocoa 之 Core Data(1)- 框架详解
Core data 是 Cocoa 中处理数据,绑定数据的关键特性,其重要性不言而喻,但也比较复杂.Core Data 相关的类比较多,初学者往往不太容易弄懂.计划用三个教程来讲解这一部分: 框架详解 ...
- iOS 开发之照片框架详解(2)
一. 概况 本文接着 iOS 开发之照片框架详解,侧重介绍在前文中简单介绍过的 PhotoKit 及其与 ALAssetLibrary 的差异,以及如何基于 PhotoKit 与 AlAssetLib ...
- Quartz.NET作业调度框架详解
Quartz.NET作业调度框架详解 http://www.cnblogs.com/lmule/archive/2010/08/28/1811042.html
- mapreduce框架详解
hadoop 学习笔记:mapreduce框架详解 开始聊mapreduce,mapreduce是hadoop的计算框架,我学hadoop是从hive开始入手,再到hdfs,当我学习hdfs时候,就感 ...
- iOS 开发之照片框架详解之二 —— PhotoKit 详解(下)
本文链接:http://kayosite.com/ios-development-and-detail-of-photo-framework-part-three.html 这里接着前文<iOS ...
随机推荐
- RadioButtonFor绑定值
<div class="form-group"> <label class="control-label col-md-2">是否< ...
- 《HP大规模敏捷开发实践》读书笔记
读这本书的心得,敏捷是实践出来的,哪怕不懂srcum**等方法,只要坚持心中的价值观,朝一个方向改进,哪怕不能“任何时候都拥有符合发布要求的代码”,今天比昨天好,也是成功. 通过业务分析确定开 ...
- WEB前端工程师面试题【前端】
1.form中的input有哪些类型?各是做什么处理使用的?2.table标签中border,cellpadding td标签中colspan,rowspan分别起什么作用?3.给Array原型添加一 ...
- Voreen(三) 光线投射参数介绍
本篇介绍光线投射的第二个个制Pass,光线合成的参数,对应于第一篇总的流程介绍中的Processor SingleVolumeRaycaster.可设置的参数如下: 1,Sampling Rate 采 ...
- go语言的 数组、slice、map使用(转)
golang群 点击加入 go语言的 数组.slice.map使用, 由于网上有很好的说明, 不需要再写了,请看这几篇: Go语言中的 Array, Slice和 Map 深入学习golang五篇,以 ...
- track by
ng-repeat指令中使用track by子语句解决重复数据遍历的错误 <li ng-repat="x in [2, 2]" ng-bind="x"&g ...
- jquery EasyUI
http://stackoverflow.com/questions/9103633/how-to-make-drag-and-drop-docking-panels 13:18:02 F1 2015 ...
- codeforces 27E Number With The Given Amount Of Divisors
E. Number With The Given Amount Of Divisors time limit per test 2 seconds memory limit per test 256 ...
- LeetCode() Basic Calculator 不知道哪里错了
class Solution {public: int calculate(string s) { stack<int> num; stack<ch ...
- python字符串基本操作