.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秒

Dapper     -------  3.0秒

PetaPoco   -------  2.4秒

其实EF第一次的话,会慢一些,第一次会把一些模型数据加载到内存中,后面就非常快了,这里贴一个EF 暖机代码

   //EF暖机    using (var db = new CLNContext())
            {
                var objectContext = ((IObjectContextAdapter)db).ObjectContext;
                var mappingCollection = (System.Data.Entity.Core.Mapping.StorageMappingItemCollection)objectContext.MetadataWorkspace.GetItemCollection(System.Data.Entity.Core.Metadata.Edm.DataSpace.CSSpace);
                mappingCollection.GenerateViews(new System.Collections.Generic.List<System.Data.Entity.Core.Metadata.Edm.EdmSchemaError>());
            }

总结:每个ORM的存在都有它的价值,不能说哪个哪个好,EF是微软自家推出的,很多代码都是自动生成的,一句SQL语句都不用写,确实非常方便,但是EF的包很大,有5M多,而且微软封装好的也不太利于扩展,像写一些复杂的SQl语句就不是很方便了,Dapper 和PetaPoco相比下来都是比较轻的,而且用起来的话也是非常灵活的。哪一个更适合你的项目,用起来更顺手,才是最好的选择方案。

				
时间: 2024-08-03 07:17:29

.Net开源微型ORM框架测评的相关文章

视频教程--ASP.NET MVC 使用 Petapoco 微型ORM框架+NpgSql驱动连接 PostgreSQL数据库

说好的给园子里的朋友们录制与<ASP.NET MVC 使用 Petapoco 微型ORM框架+NpgSql驱动连接 PostgreSQL数据库> 这篇博客相对应的视频,由于一个月一来没有时间录制,今天我兑现了给朋友们的承诺.. 本次视频教程的目录为 视频.代码.资料,其中视频有4段,资料是我收集的相关资料.. 视频下载地址:http://pan.baidu.com/s/1c05sysC 希望大家多多支持... 郝喜路 2014年6月8日 11:11:02   http://haoxilu.cn

Weed3 for java 新的微型ORM框架

Weed3,微型ORM框架(支持:java sql,xml sql,annotation sql:存储过程:事务:缓存:监听:等...) 05年时开发了第一代: 08年时开发了第二代,那时候进入互联网公司,对性能有了全新的认识: 14年时开发了第三代.因为不喜欢滥用反射,不喜欢有很多配置,所以一直在执着的没放弃. 前两代,都是在.net开发的:第三代,重点放在了java上.应该算是个功能全面且最小的ORM框架,无其它依赖,仅0.1mb.对外的接口也不多,主要由DbContext上的四个接口发起所

.Net开源SqlServer ORM框架SqlSugar(转)

一.链接整理 官方Git源代码地址: https://github.com/sunkaixuan/SqlSugar 最新发布版更新地址:当前版本Release 3.5.2.1 https://github.com/sunkaixuan/SqlSugar/releases 框架开发者孙凯旋博客地址:http://www.cnblogs.com/sunkaixuan 二.优点 SqlSugar 是一款小巧,并且功能齐全的ORM,并不需要像Dapper一样依赖第三方扩展 SqlSugar 语法易用简单

ASP.NET MVC 使用 Petapoco 微型ORM框架+NpgSql驱动连接 PostgreSQL数据库

今天有幸被召回母校给即将毕业的学弟学妹们讲我这两年的工作史,看了下母校没啥特别的变化,就是寝室都安了空调,学妹们都非常漂亮而已..好了不扯蛋了,说下今天的主题吧.这些天我在深度定制语法高亮功能的同时发现了博客园提供的一些有意思的函数,甚至有几个博客园都没用到,我也不知道怎么才能触发那些功能..打开这个js就可以看到很多好用的东西了,虽然写的不怎么样,但是至少有这些功能. ps: 推荐安装一个代码格式化的插件,否则一坨看着蛋疼.比如第一个就是 log,方便调试. http://www.qdmm.c

微型orm框架--dapper的简单使用

1.安装 首先使用nuget安装dapper,因为这里的示例是使用mysql,所以还要安装mysql的驱动.如下图: 2 数据库表 脚本 SET FOREIGN_KEY_CHECKS=0; -- ---------------------------- -- Table structure for class -- ---------------------------- DROP TABLE IF EXISTS `class`; CREATE TABLE `class` ( `id` int(

ASP.NET MVC 使用 Petapoco 微型ORM框架+NpgSql驱动连接 PostgreSQL数据库(问题总结)

安装过程就简单带过: 1. 在看代码前,我们需要将NpgSql和Petapoco 加载到当前项目中来,我将使用Nuget来添加到当前项目,分别如下: Install-Package Npgsql Install-Package PetaPoco 2.下面看一下Web.config中的重要代码 1>数据库连接字符串 <connectionStrings> <add name ="Postgresql" connectionString="Server=1

ORM框架详解

.Net开源微型ORM框架测评 什么是ORM? 对象关系映射(英语:Object Relation Mapping,简称ORM,或O/RM,或O/R mapping),是一种程序技术,用于实现面向对象编程语言里不同类型系统的数据之间的转换.从效果上说,它其实是创建了一个可在编程语言里使用的"虚拟对象数据库". 一般的ORM包括以下四部分: 一个对持久类对象进行CRUD操作的API: 一个语言或API用来规定与类和类属性相关的查询: 一个规定MAPPING METADATA的工具: 一种

GreenDao开源ORM框架浅析

Android程序开发中,避免不了要用到数据库,我们都知道android提供了内置的Sqlite,即调用SQLiteOpenHelper的方法,来操作数据库,但是使用过程较为繁琐,从建表到对表中数据的正删改查操作,需要大量的代码来建立表,和完成这些操作. GreenDao居然是ORM框架,它跟hibernate是很像的,就是当你配置了一些参数信息之后,可以由框架来帮你生成对应的实体类,还有生成对应的操作实体类的代码(自动建表和基本的增删改查). 优点: 1.最大性能(最快的Android ORM

【转载】Android开源:数据库ORM框架GreenDao学习心得及使用总结

转载链接:http://www.it165.net/pro/html/201401/9026.html 最近在对开发项目的性能进行优化.由于项目里涉及了大量的缓存处理和数据库运用,需要对数据库进行频繁的读写.查询等操作.因此首先想到了对整个项目的数据库框架进行优化. 原先使用android本身内置的sqllite,也就是用的最基本的SQLiteOpenHelper方法,这种方法对自己来说比较方便易懂.但是在使用过程中感觉很繁琐,从建表到对表的增删改查等操作,如果表对象的属性很多,就需要使用大量的