Einige Vorschläge, auf welche .NET ORM Sie beim Lernen achten sollten

7

Ich schäme mich ein wenig zu sagen, dass ich noch nie ein ORM benutzt habe; Wie du dich vielleicht erinnerst, ist der größte Teil meiner beruflichen Erfahrung Hacking mit Classic ASP und dem kleinen .NET. Ich tendiere dazu, nur Wartung zu sein.

Für meine eigene Karriere sowie für die Vorbereitung auf ein neues Projekt bei der Arbeit (fertig in. NET endlich!) Ich bin dabei, ein ORM zu meinem Skillset hinzuzufügen - der Masochist zu sein, ich werde auch schauen bei TDD, während ich für dieses Projekt bin.

Wie auch immer, ich benutze .NET 3.5 für das Projekt (oder plane es sowieso), also versuche ich zu entscheiden, welches ORM ich wählen möchte; Wie ich schon sagte, ich kenne sie nicht wirklich, aber ich weiß generell, was sie tun sollen und wie sie es tun. Meine Auswahl basiert im Wesentlichen auf NHibernate oder LINQ / Entity Framework. Ich habe keine verwendet, aber ich habe einige Demos von LINQ2SQL und von NHibernate gesehen.

NHibernate scheint insgesamt robuster zu sein (Linq2Sql ist nicht einmal ein "wahres" ORM) und wird auch stark in der ALT.NET-Community verwendet, die ich mehr erforschen möchte. EF ist jedoch das Angebot von Microsoft und wird daher von der Mehrheit der Entwicklerteams, die nur das verwenden, was Microsoft herausbringt und keine Alternativen sucht, stark genutzt werden.

Ich habe sowohl gute als auch schlechte Dinge über EF gehört, aber ich möchte etwas auswählen, das mir eine gute Grundlage gibt und auch anderen Arbeitgebern gut aussieht, wenn ich einen besseren Job in einem Unternehmen mit einem echten Job finde Entwicklungsteam.

BEARBEITEN: Ich sollte hinzufügen, dass, wenn es bei der Auswahl eines ORM eine Rolle spielt, die Anwendung sich mit einer bestehenden Datenbank befassen muss.

BEARBEITEN (15.02.2009 18:48): Die einzige Datenbank, die verwendet wird, ist SQL Server 2005 Standard, die auf Windows Server 2003 ausgeführt wird. Vorausgesetzt, dass dies für ein Projekt zur Arbeit ist Mein Ziel ist es, etwas auszuwählen, das mich nicht sehr lange brauchen wird (da ich produktiv sein muss und "Ein neues Werkzeug lernen" wird nicht gut aussehen), aber etwas, das besser ist als das Rollen meiner eigenen DAL. Zu der Zeit habe ich nicht entschieden, ob die Anwendung ein intelligenter Client oder eine ASP.NET-Anwendung sein wird, aber ein Teil davon wird mehr als wahrscheinlich mit ASP.NET MVC getan werden.

    
Wayne Molina 15.02.2009, 14:12
quelle

9 Antworten

13

Ich würde nhibernate empfehlen - da es Open Source ist und eine sehr aktive Community hat, ist Hilfe leicht zu bekommen. Ein guter Ausgangspunkt ist Die NHibernate-FAQ , es reicht vom Post für Anfänger bis zu sehr fortgeschrittenen Konzepten. Triff den Boden, indem du liest und folgst Bereiten Sie Ihr System auf NHibernate und Ihre erste NHibernate-basierte Anwendung .

Alle Arbeitgeber, für die ich gearbeitet habe, haben NHibernate für ORM in .NET und Hibernate für ORM in Java verwendet - Sie sollten also davon profitieren, NHibernate zu lernen.

    
Tobias Hertkorn 15.02.2009, 14:29
quelle
4

SubSonic von Rob Connery ist ein "Swiss Army Knife" ORM basierend auf ActiveRecord. Sie können damit in 30 Minuten produktiv sein. Seien Sie gewarnt, es ist nicht auf der Ebene von NHibernate in Bezug auf Konfigurationsoptionen, etc. Es ist sehr produktiv, und der Code ist sehr sauber. Wir verwenden es für die meisten unserer Projekte.

    
David Robbins 15.02.2009 19:04
quelle
2

Viele Diskussionen zu diesem Thema in Stack Overflow:

Welche Objekt-Mapper-Lösung würden Sie empfehlen? net?

Welches ist das beste Datenzugriffsparadigma für Skalierbarkeit?

Persistenz-Framework?

Sowohl EF als auch Nhibernate werden als nützlich für große Projekte betrachtet. Einige der wichtigsten Bedenken, die über EF geäußert werden, sind der Mangel an Lazy Loading / Persistenz Ignoranz. Nhibernate hat eine steilere Lernkurve und erfordert mehr manuelle Konfiguration.

    
Turnkey 15.02.2009 14:48
quelle
2

Warum beschränken Sie sich auf nur einen, während Sie lernen? Warum nicht mit allen herumspielen und sehen, welche sich für dich am besten anfühlen? Dann können Sie einen tiefen Tauchgang in diese Technologien beginnen und mehr aus ihnen herausholen.

Ich persönlich würde mit LINQ to SQL beginnen, weil es so einfach ist. Spielen Sie damit herum, nur um sich daran zu gewöhnen, wie ein ORM verwendet werden kann. Sie werden überrascht sein, wie einfach es ist und wie einfach es ist, anzufangen, und dann werden Sie wahrscheinlich auf viele der Schwachpunkte stoßen, die einige Leute zu Entity Framework führen.

Sobald Sie Entity Framework ein wenig benutzt haben, werden Sie entweder damit zufrieden sein oder Sie werden sich fragen, was das große Problem mit nHibernate und einigen der anderen ist, die in verwandten Fragen erwähnt werden.

Es ist meiner Meinung nach zu diesem Zeitpunkt, dass Sie am besten mit etwas wie nHibernate erfolgreich sein werden, was ein schwer zu erlernender erster Ausflug in das ORM-Land ist.

Wie auch immer, ich verschreibe nicht der "was sollte ich versuchen" Denkweise. Probieren Sie alle aus, sage ich.

    
Eric King 15.02.2009 15:13
quelle
2

Ich würde sagen, gehen Sie mit NHibernate. Es ist weit verbreitet, hat eine Reihe von Tutorials und Lernressourcen und eine aktive Beitragsgruppe. Es ist vergleichbar mit Hibernate, was bedeutet, dass alle Fähigkeiten, die Sie auf dem .NET NHibernate lernen, auf Java portierbar sind. Win-Win-Win-etc. :)

    
Jeffrey Cameron 15.02.2009 18:55
quelle
2

Ich zweite David Robbins Erwähnung von Unterschall. Ein Nachteil, auf den ich hinweisen werde, ist, dass die Dokumentation nicht perfekt ist. Es ist wirklich ziemlich einfach zu arbeiten, man muss nur wissen, wie man es macht.

Ich nehme noch eine weitere erwähnenswerte Frage an: Welche Datenbanken müssen Sie unterstützen? Wenn Sie mit etwas anderem als SQL Server arbeiten müssen, würde ich LINQ nicht verwenden. Ich könnte mich dabei irren, aber beim letzten Mal habe ich keine gute Unterstützung für andere Datenbanken als SQL Server.

Das letzte, was ich erwähnen möchte, ist, dass Sie sich nicht nur eines aussuchen müssen. Ich habe nHibernate, LINQ to SQL und Subsonic im gleichen Projekt mit anständigem Erfolg verwendet (obwohl ich rate, dies zu vermeiden, wenn überhaupt möglich). Mein Rat ist, ein wenig Zeit mit allen von ihnen zu verbringen und zu lernen, was das Beste an jedem ist.

Folgendes würde ich über jeden einzelnen sagen:

  • LINQ to SQL - sehr einfach zum Laufen. Aber wenn Sie etwas anderes als SQL Server verwenden möchten, sind Sie ziemlich SOL.
  • NHibernate - Dies ist wahrscheinlich das mächtigste von allen ORMs und es unterstützt die meisten RDBMSes, aber es kann mühsam sein, damit zu arbeiten, da es nicht viele wirklich gute freie Code-Generatoren gibt, mit denen man arbeiten kann Ich spreche aber für die unfreien.)
  • SubSonic - Ein guter Kompromiss zwischen NHibernate und LINQ to SQL. Es unterstützt nicht so viele RDBMS wie NHibernate, aber es funktioniert mit den meisten von denen, die Sie in der Geschäftswelt treffen würden.

TL; DR : NHibernate, wenn Sie viel Kontrolle über die Datenbank haben oder etwas Obskures unterstützen müssen. SubSonic, wenn Sie mit etwas anderem als SQL Server arbeiten müssen. LINQ to SQL, wenn Sie nur SQL Server ausführen möchten.

    
Jason Baker 15.02.2009 19:44
quelle
1

Da Sie .NET 3.5 verwenden, empfehle ich LINQ.
LINQ erfordert nur, dass IEnumerable- und IQueryable-Schnittstellen implementiert werden.
Das bedeutet, dass es nicht auf relationale Daten beschränkt ist.
Siehe auch den Artikel ORM in .NET 3.5

    
Kb. 15.02.2009 14:43
quelle
1

Für die freie und Open-Source-Route ist NHibernate ziemlich schwer zu schlagen. Es ist eine reife ORM mit einer sehr aktiven Community und viel Unterstützung. Es gibt eine anfängliche Lernkurve dort mit NHibernate, aber ich denke, es ist die Mühe wert, die Sie darin investieren könnten.

Wenn Sie in der .NET-Welt von Micrsoft bleiben wollen, ist LINQ eine großartige Technologie, die Sie lernen können, und nicht nur LINQ2SQL (was wie gesagt kein vollwertiges ORM ist), da LINQ auf Objekte angewendet werden kann. XML und im Grunde alles, was IEnumerable / IQueryable ist.

Für die Zukunft empfehle ich Entity Framework (wieder in der Microsoft-Welt). Es gab ein paar gruselig klingende Ansagen vom LINQ2SQL-Team innerhalb von Microsoft, die darauf hindeuten, dass der gesamte zukünftige Entwicklungsaufwand in Entity Framework und nicht in LINQ2SQL fließen wird. Es gibt eine gewisse Überschneidung dieser Technologien. Natürlich glaube ich nicht, dass LINQ (allgemein gesprochen) in absehbarer Zeit weggeht, aber ich würde vorsichtig sein, wenn ich für den langen Begriff in LINQ2SQL investieren würde. Der Entity Framework ist noch relativ neu und in aktiver Entwicklung, also erwarten wir, dass EF in den kommenden Monaten / Jahren reifen wird.

Genau in diesem Moment ist LINQ2SQL großartig und Sie können ziemlich schnell damit arbeiten und loslegen, ohne unbedingt in das Innere davon (dh Expressionsbäume usw.) eintauchen zu müssen, aber für die Zukunft würde ich es tun Ich empfehle Entity Framework / NHibernate, da ich glaube, dass diese beiden ORMs in den nächsten Jahren von den meisten .NET Entwicklerteams verwendet werden.

Natürlich gibt es eine Vielzahl von verschiedenen ORM-Lösungen, und ich bezweifle, dass eine von ihnen eine Einheitslösung sein wird, so dass Sie wirklich jeden von ihnen untersuchen und sehen müssen welches für das spezifische Projekt, an dem Sie gerade arbeiten, am besten geeignet ist.

    
CraigTP 15.02.2009 15:07
quelle
1

Checkout XmlDataMapper eine einfache kostenlose ORM (LGPL License), die einen geringen Speicherbedarf im Vergleich zu den anderen Riesen hat.
Das Beispielprojekt sollte gut genug sein, um loszulegen.

Um XmlDataMapper zu integrieren, müssen Sie nur 4 kleine Schritte machen

  1. Erstellen Sie eine Geschäftseinheit / DTO für die Tabellen
  2. Erstellen Sie eine XML-Datei mit den Zuordnungsinformationen zwischen der Tabelle und dem DTO.
  3. Geben Sie die DTO- und XML-Datei in der Konfiguration an.
  4. Rufen Sie einfach den DTOConverter.Convert (dataReader) und andere Methoden auf, um Ihren Datenbankeintrag in DTO / Business Entity
  5. zu konvertieren
Binoj Antony 21.06.2010 12:07
quelle

Tags und Links