日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

.Net开源微型ORM框架测评

發(fā)布時(shí)間:2023/12/4 asp.net 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 .Net开源微型ORM框架测评 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

? 什么是ORM?

?

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

?

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

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

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

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

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

本次對比的.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/

?

對比因素

1. 操作的難易程度

2. 執(zhí)行的效率

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

?

Entity?Framework

1.新建C#控制臺

?

2. 使用NuGet引用EF組件

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

?

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

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

?

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

?

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

?

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

static void Main(string[] args){Stopwatch S = new Stopwatch(); ?//秒表對象 計(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();}

?

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

?

Dapper

1.同樣新建控制臺程序

2. NuGet引用Dapper

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();

? ? ? ? }

? ? }

}

?

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

?

?

這里可以看到,Dapper比EF更快 ?Dapper用時(shí)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后,同樣會(huì)自動(dòng)生成數(shù)據(jù)庫訪問上下文和模型Model,這里打開 Models -> Database.tt ,修改?ConnectionStringName = "CLNContext";這里要和App.Config里的連接字符串保持一致,更改過以后保存,會(huì)自動(dòng)生成數(shù)據(jù)庫訪問上下文,Models -> Database.tt -> Database.cs

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();}

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

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

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

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

//res就是返回插入的數(shù)據(jù)的ID

對比結(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>());}


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

原文地址:http://www.cnblogs.com/myshowtime/p/5951270.html


.NET社區(qū)新聞,深度好文,微信中搜索dotNET跨平臺或掃描二維碼關(guān)注

總結(jié)

以上是生活随笔為你收集整理的.Net开源微型ORM框架测评的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。