首頁  >  文章  >  类库下载  >  .Net開源微型ORM框架測評

.Net開源微型ORM框架測評

高洛峰
高洛峰原創
2016-10-14 17:57:391905瀏覽

什麼是ORM?

.Net開源微型ORM框架測評

     物件關係映射(英文:Object Relation Mapping,簡稱ORM,或O/RM,或O/R mapping),是一種程式技術,用於實現物件導向程式語言裡不同類型系統的資料之間的轉換。從效果上來說,它其實是創建了一個可在程式語言裡使用的「虛擬物件資料庫」。

 

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

一個對持久類別物件進行CRUD操作的API;

一個語言或API用來規定與類別和類別屬性相關的查詢;

一個規定一個語言或API用來規定與類別和類別屬性相關的查詢;工具;

一種技術可以讓ORM的實作同事務物件一起進行DIRTYCHECKING, LAZY ASSOCIATION FETCHING以及其他的最佳化操作。

這次比較的.NET ORM框架

1. Entity Framework

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

2. Dapper

官網github.com/StackExchange/dapper-dot-net

3. PetaPoco

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

 

對比因素

1. 操作的難易度

.執行的效率

3. 跨資料庫的使用

 

Entity Framework

1.新建C#控制台

.Net開源微型ORM框架測評2. 使用NuGetEF48元件套件在N並安裝Entity Framework

 項目右鍵新建新增項目ADO.NET實體資料模型 

.Net開源微型ORM框架測評我這裡的CLN用的是資料庫名稱

導下一步這裡是配置資料庫連線新連線將App.Config的實體連線設定為CLNContext

.Net開源微型ORM框架測評

然後又出現一個對話框 -- 您要在模型中包含哪些資料庫對象,這裡把表格勾上,點選完成就OK了,然後會彈出兩個警告框,這是因為有兩個TT模板需要執行,不用管它,確定就行了,這是出現了Edmx資料庫模型關係圖

.Net開源微型ORM框架測評

接下來就是進入項目的 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();

        }

.Net開源微型ORM框架測評

NT_Photo 表裡有600多條數據,這裡看到查詢的速度還是蠻快的 EF用時5.9秒

 

組,程式.Net開源微型ORM框架測評

2. NuGet引用Dapper


    Dapper沒有EF那麼強大,相當於一個SqlHelper,我們需要手動配置字串連接字串,這裡把剛產生一個SqlHelper,我們需要手動配置字串。 ,放到專案裡面,然後就是就是進入Program.cs裡面寫程式了
  • .Net開源微型ORM框架測評

    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

組件使用3.0秒

.Net開源微型ORM框架測評 

PetaPoco

組件使用231.

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 ,修改 StringName = "CLNContext";這裡在這裡ConnectionConnection要和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語句的,先看一下查詢速度

.Net開源微型ORM框架測評

在这里可以看到,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相比下来都是比较轻的,而且用起来的话也是非常灵活的。哪一个更适合你的项目,用起来更顺手,才是最好的选择方案。

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
上一篇:暫無下一篇:Sealed密封类