Heim >类库下载 >net类库 >Evaluierung des .Net Open-Source-Micro-ORM-Frameworks

Evaluierung des .Net Open-Source-Micro-ORM-Frameworks

高洛峰
高洛峰Original
2016-10-14 17:57:391935Durchsuche

Was ist ORM?

Evaluierung des .Net Open-Source-Micro-ORM-Frameworks

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

Evaluierung des .Net Open-Source-Micro-ORM-Frameworks 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

Evaluierung des .Net Open-Source-Micro-ORM-FrameworksRechtsklick. 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

Evaluierung des .Net Open-Source-Micro-ORM-Frameworks 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

Evaluierung des .Net Open-Source-Micro-ORM-Frameworks

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

Evaluierung des .Net Open-Source-Micro-ORM-Frameworks

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

        }
1 Erstellen Sie außerdem ein neues Konsolenprogramm

Evaluierung des .Net Open-Source-Micro-ORM-Frameworks

2 >


Dapper ist nicht so leistungsstark wie EF und entspricht einem SqlHelper. Wir müssen die Verbindungszeichenfolge manuell konfigurieren . Fügen Sie hier die gerade von EF generierte Modellklasse NT_Photo.cs in das Projekt ein und geben Sie dann Program.cs ein, um den Code zu schreiben

  • Evaluierung des .Net Open-Source-Micro-ORM-Frameworks

    Wir verwenden hier das SqlConnertion-Objekt, da Dapper IDbConnection erweitert und dann Dapper in dem Namespace verwendet, in dem wir auf Dapper verweisen.
  • 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();
            }
        }
    }
    PetaPoco
1. Verwenden Sie NuGet, um auf den PetaPoco zu verweisen Komponente

3. Konfigurieren Sie die Verbindungszeichenfolge in App.Config

Evaluierung des .Net Open-Source-Micro-ORM-Frameworks

4. Öffnen Sie nach der Installation von PetaPoco den Datenbankzugriffskontext und das Modell, und ändern Sie ConnectionStringName = „CLNContext“; dies sollte mit der Verbindungszeichenfolge in App.Config übereinstimmen. Nach dem Ändern und Speichern wird der Datenbankzugriffskontext automatisch generiert, Modelle -> Datenbank.cs

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

Evaluierung des .Net Open-Source-Micro-ORM-Frameworks

在这里可以看到,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相比下来都是比较轻的,而且用起来的话也是非常灵活的。哪一个更适合你的项目,用起来更顺手,才是最好的选择方案。

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Vorheriger Artikel:KeinerNächster Artikel:Sealed密封类