ORM とは何ですか?
オブジェクト リレーショナル マッピング (英語: Object Relation Mapping、ORM、O/RM、または O/R マッピングと呼ばれます) は、さまざまなオブジェクト指向プログラミング言語を実装するために使用されるプログラミング テクノロジです。型システム データ間の変換。実際には、プログラミング言語で使用できる「仮想オブジェクト データベース」を作成します。
一般的な ORM には、次の 4 つの部分が含まれます:
永続クラス オブジェクトに対して CRUD 操作を実行する API。
クラスおよびクラス属性に関連するクエリを指定するために使用される API。
MAPPING METADATA を指定する API。ツール;
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/
操作性
2.実行効率
3. クロスデータベースの使用
1. 新しい C# コンソールを作成します
2. NuGet パッケージを管理するためにプロジェクト参照を右クリックしますオンラインでダウンロードして、Entity Framework をインストールします
プロジェクトを右クリックして新しい項目を作成し、新しい項目を追加します ADO.NET Entity Data Model
ここでは CLN のデータベース名を使用します
追加後、エンティティ モデル データ ウィザードが表示され、データベースから生成することを選択します。次のステップは、新しい接続を作成し、App.Config のエンティティ接続を CLNContext に設定することです
。 次に、ダイアログ ボックスが表示されます -- どのデータベース オブジェクトをモデルに含めますか? ここでテーブルを確認し、[OK] をクリックすると、2 つの 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 テーブル。ここでは、クエリ速度が 5.9 秒かかることがわかります
Dapper
1. プログラム2. NuGet は Dapper を参照します
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(); } } }
Dapper が IDbConnection を拡張し、SqlConnection が IDbConnection を実装しているため、ここでは SqlConnertion オブジェクトを使用します。 Dapper を使用して Dapper の名前空間を参照します
<?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>
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貌似更快 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相比下来都是比较轻的,而且用起来的话也是非常灵活的。哪一个更适合你的项目,用起来更顺手,才是最好的选择方案。