搜尋
首頁类库下载net類別庫.Net開源微型ORM框架測評

什麼是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

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前By尊渡假赌尊渡假赌尊渡假赌

熱工具

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

MantisBT

MantisBT

Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強大的PHP整合開發環境

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

DVWA

DVWA

Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中