国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

.Net開源微型ORM框架測(cè)評(píng)

高洛峰
發(fā)布: 2016-10-14 17:57:39
原創(chuàng)
2047人瀏覽過

什么是orm?

1.jpg

?? ? 對(duì)象關(guān)系映射(英語(yǔ):Object Relation Mapping,簡(jiǎn)稱ORM,或O/RM,或O/R mapping),是一種程序技術(shù),用于實(shí)現(xiàn)面向?qū)ο缶幊陶Z(yǔ)言里不同類型系統(tǒng)的數(shù)據(jù)之間的轉(zhuǎn)換。從效果上說,它其實(shí)是創(chuàng)建了一個(gè)可在編程語(yǔ)言里使用的“虛擬對(duì)象數(shù)據(jù)庫(kù)”。

?

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

一個(gè)對(duì)持久類對(duì)象進(jìn)行CRUD操作的API;

一個(gè)語(yǔ)言或API用來規(guī)定與類和類屬性相關(guān)的查詢;

一個(gè)規(guī)定MAPPING?METADATA的工具;

一種技術(shù)可以讓ORM的實(shí)現(xiàn)同事務(wù)對(duì)象一起進(jìn)行DIRTYCHECKING, LAZY ASSOCIATION FETCHING以及其他的優(yōu)化操作。

本次對(duì)比的.NET ORM框架

1. Entity Framework

官網(wǎng)?https://msdn.microsoft.com/zh-cn/data/ef.aspx

2. Dapper

官網(wǎng)?https://github.com/StackExchange/dapper-dot-net

3. PetaPoco

官網(wǎng)?http://www.toptensoftware.com/petapoco/

?

對(duì)比因素

1. 操作的難易程度

2. 執(zhí)行的效率

3. 跨數(shù)據(jù)庫(kù)的使用

?

Entity?Framework

1.新建C#控制臺(tái)

1.jpg

2. 使用NuGet引用EF組件

項(xiàng)目引用 右鍵 管理NuGet程序包 在聯(lián)機(jī)里下載并安裝Entity?Framework

1.jpg

?項(xiàng)目右鍵 新建 添加 新建項(xiàng) ADO.NET實(shí)體數(shù)據(jù)模型?

我這里的CLN用的是數(shù)據(jù)庫(kù)名

1.jpg

?添加過以后 有一個(gè)實(shí)體模型數(shù)據(jù)向?qū)?選擇 從數(shù)據(jù)庫(kù)生成 下一步 這里是配置數(shù)據(jù)庫(kù)連接 新建連接 將App.Config的實(shí)體連接設(shè)置為CLNContext

1.jpg

然后又出現(xiàn)一個(gè)對(duì)話框 ?-- 您要在模型中包含哪些數(shù)據(jù)庫(kù)對(duì)象,這里把表勾上,點(diǎn)擊完成就OK了,然后會(huì)彈出兩個(gè)警告框,這是因?yàn)橛袃蓚€(gè)TT模板需要執(zhí)行,不用管它,確定就行了,這是出現(xiàn)了Edmx數(shù)據(jù)庫(kù)模型關(guān)系圖

1.jpg

接下來就是進(jìn)入項(xiàng)目的?Program.cs里面寫代碼了

static void Main(string[] args)
        {
            Stopwatch S = new Stopwatch();  //秒表對(duì)象 計(jì)時(shí)
            S.Start();

            var DBContext = new CLNContext();
            foreach (var item in DBContext.NT_Photo)
            {
                Console.WriteLine(item.PostIP);
            }
           
            Console.WriteLine(S.Elapsed);
            Console.ReadKey();

        }
登錄后復(fù)制

1.jpg

NT_Photo 表里有600多條數(shù)據(jù),這里看到查詢的速度還是蠻快的 ?EF用時(shí)5.9秒

?

Dapper

1.同樣新建控制臺(tái)程序

2. NuGet引用Dapper

  • 1.jpg

  • Dapper沒有EF那么強(qiáng)大,相當(dāng)于一個(gè)SqlHelper,我們需要手動(dòng)配置連接字符串,這里把剛才EF生成的NT_Photo.cs 模型類,放到項(xiàng)目里面,然后就是就是進(jìn)入到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();
            }
        }
    }
    登錄后復(fù)制

我們這里用了SqlConnertion對(duì)象,因?yàn)镈apper是對(duì)IDbConnection做了擴(kuò)展, SqlConnection是實(shí)現(xiàn)了IDbConnection,然后在我們引用Dapper的命名空間using Dapper;

1.jpg

這里可以看到,Dapper比EF更快 ?Dapper用時(shí)3.0秒

?

PetaPoco

1.同樣新建控制臺(tái)程序

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>
登錄后復(fù)制

4. 安裝PetaPoco后,同樣會(huì)自動(dòng)生成數(shù)據(jù)庫(kù)訪問上下文和模型Model,這里打開 Models -> Database.tt ,修改?ConnectionStringName = "CLNContext";這里要和App.Config里的連接字符串保持一致,更改過以后保存,會(huì)自動(dòng)生成數(shù)據(jù)庫(kù)訪問上下文,Models -> Database.tt -> Database.cs

1.jpg

5.準(zhǔn)備工作完畢,就是進(jìn)入正題了,同樣進(jìn)入到 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();


        }
登錄后復(fù)制

這里PetaPoco 也有數(shù)據(jù)庫(kù)訪問上下文CLNContextDB(),不過也是需要寫SQL語(yǔ)句的,先看一下查詢速度

1.jpg

在這里可以看到,PetaPoco貌似更快 PetaPoco用時(shí)2.4秒

其實(shí)PetaPoco更強(qiáng)大的是,它對(duì)模型做了增刪改查的方法,這就非常方便了

 NT_Photo PP = new NT_Photo(); var res= PP.Insert();  

//res就是返回插入的數(shù)據(jù)的ID
登錄后復(fù)制

對(duì)比結(jié)果:

這里可以看到EF,Dapper,PetaPoco 的差別了

NT_Photo 600多條數(shù)據(jù)

EF ? ? ? ? ? ?------ ? 5.9秒

Dapper ? ? ------- ?3.0秒

PetaPoco ? ------- ?2.4秒

?

其實(shí)EF第一次的話,會(huì)慢一些,第一次會(huì)把一些模型數(shù)據(jù)加載到內(nèi)存中,后面就非常快了,這里貼一個(gè)EF 暖機(jī)代碼

//EF暖機(jī)
    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>());
            }
登錄后復(fù)制

總結(jié):每個(gè)ORM的存在都有它的價(jià)值,不能說哪個(gè)哪個(gè)好,EF是微軟自家推出的,很多代碼都是自動(dòng)生成的,一句SQL語(yǔ)句都不用寫,確實(shí)非常方便,但是EF的包很大,有5M多,而且微軟封裝好的也不太利于擴(kuò)展,像寫一些復(fù)雜的SQl語(yǔ)句就不是很方便了,Dapper 和PetaPoco相比下來都是比較輕的,而且用起來的話也是非常靈活的。哪一個(gè)更適合你的項(xiàng)目,用起來更順手,才是最好的選擇方案。

最佳 Windows 性能的頂級(jí)免費(fèi)優(yōu)化軟件
最佳 Windows 性能的頂級(jí)免費(fèi)優(yōu)化軟件

每個(gè)人都需要一臺(tái)速度更快、更穩(wěn)定的 PC。隨著時(shí)間的推移,垃圾文件、舊注冊(cè)表數(shù)據(jù)和不必要的后臺(tái)進(jìn)程會(huì)占用資源并降低性能。幸運(yùn)的是,許多工具可以讓 Windows 保持平穩(wěn)運(yùn)行。

下載
來源:php中文網(wǎng)
本文內(nèi)容由網(wǎng)友自發(fā)貢獻(xiàn),版權(quán)歸原作者所有,本站不承擔(dān)相應(yīng)法律責(zé)任。如您發(fā)現(xiàn)有涉嫌抄襲侵權(quán)的內(nèi)容,請(qǐng)聯(lián)系admin@php.cn
最新問題
Sealed密封類 Sealed密封類
2016-11-01 13:32:24
開源免費(fèi)商場(chǎng)系統(tǒng)廣告
最新下載
更多>
網(wǎng)站特效
網(wǎng)站源碼
網(wǎng)站素材
前端模板
關(guān)于我們 免責(zé)申明 意見反饋 講師合作 廣告合作 最新更新
php中文網(wǎng):公益在線php培訓(xùn),幫助PHP學(xué)習(xí)者快速成長(zhǎng)!
關(guān)注服務(wù)號(hào) 技術(shù)交流群
PHP中文網(wǎng)訂閱號(hào)
每天精選資源文章推送
PHP中文網(wǎng)APP
隨時(shí)隨地碎片化學(xué)習(xí)
PHP中文網(wǎng)抖音號(hào)
發(fā)現(xiàn)有趣的

Copyright 2014-2025 http://www.miracleart.cn/ All Rights Reserved | php.cn | 湘ICP備2023035733號(hào)