Was ist ORM?
Object Relation Mapping (englisch: Object Relation Mapping, auch ORM oder O/RM oder O/R Mapping genannt) ist eine Programmiertechnologie zur Konvertierung von Daten zwischen verschiedenen Systemtypen in objektorientierten Programmiersprachen. Tatsächlich wird dadurch eine „virtuelle Objektdatenbank“ erstellt, die in einer Programmiersprache verwendet werden kann.
Allgemeines ORM umfasst die folgenden vier Teile:
Eine API für CRUD-Operationen für persistente Klassenobjekte
Eine Sprache oder API zur Angabe verwandter Abfragen zu Klassen und Klassenattributen;
Ein Tool zum Spezifizieren von MAPPING-METADATEN;
Eine Technologie, die es ORM-Implementierungen ermöglicht, DIRTYCHECKING, LAZY ASSOCIATION FETCHING und andere Optimierungen zusammen mit Transaktionsobjekten durchzuführen.
Das .NET ORM-Framework für diesen Vergleich
1. Entity Framework
Offizielle Website https://msdn.microsoft.com/zh-cn/data/ef. aspx
2. Dapper
Offizielle Website https://github.com/StackExchange/dapper-dot-net
3. PetaPoco
Offizielle Website http:/ /www.toptensoftware.com/petapoco/
Vergleichsfaktoren
1. Effizienz der Ausführung
3. Datenbankübergreifende Verwendung
Entity Framework
1. Erstellen Sie eine neue C#-Konsole
2. Verwenden Sie NuGet, um auf EF-Komponenten zu verweisen
Klicken Sie mit der rechten Maustaste auf die Projektreferenz, um das NuGet-Paket zu verwalten. Laden Sie Entity Framework herunter und installieren Sie es
Rechtsklick. Klicken Sie auf das Projekt, um ein neues Element zu erstellen und ein neues Element hinzuzufügen. ADO .NET Entity Data Model
Der CLN hier verwende ich den Datenbanknamen
Nach dem Hinzufügen Daraufhin wird ein Entitätsmodelldaten-Assistent angezeigt. Der nächste Schritt besteht darin, die Datenbankverbindung zu konfigurieren. Stellen Sie die Entitätsverbindung von App.Config auf CLNContext ein 🎜>
und dann erscheint ein Dialogfeld – welche Datenbankobjekte möchten Sie in das Modell aufnehmen? Dann werden zwei Warnfelder angezeigt Zwei TT-Vorlagen, die ausgeführt werden müssen. Bestätigen Sie einfach. Dies ist das Edmx-Datenbankmodell-Beziehungsdiagramm. Der nächste Schritt besteht darin, das Projekt einzugeben Programmieren Sie.cs und schreiben Sie den Code
NT_Photo Es gibt mehr als 600 Daten in der Tabelle. Hier können Sie sehen, dass die Abfragegeschwindigkeit recht hoch ist. EF dauert 5,9 Sekunden
Dapper
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(); }
Wie Sie hier sehen können, Dapper ist schneller als EF.
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(); } } }
5. Nachdem die Vorbereitungen abgeschlossen sind, ist es an der Zeit, zur Sache zu kommen
PetaPoco hat es auch hier Datenbankzugriffskontext CLNContextDB(), Aber es erfordert auch das Schreiben von SQL-Anweisungen. Schauen wir uns zunächst die Abfragegeschwindigkeit an在这里可以看到,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相比下来都是比较轻的,而且用起来的话也是非常灵活的。哪一个更适合你的项目,用起来更顺手,才是最好的选择方案。