Frage

Wenn ein neues Projekt starten, was würden Sie für Ihr ORM NHibernate LINQ und warum.Was sind die vor-und Nachteile der einzelnen.

edit:LINQ to SQL nicht einfach LINQ (danke @Jon Limjap)

War es hilfreich?

Lösung

Ich habe mich gefragt, eine sehr ähnliche Frage, außer dass anstelle von NHibernate ich dachte über WilsonORM, die ich für ziemlich nett.

Es scheint mir, dass es viele wichtige Unterschiede.

LINQ:

  • ist nicht eine komplette ORM-tool (Sie können es mit einigen zusätzlichen Bibliotheken, die gerne die neuesten Entity framework - ich persönlich halte die Architektur der neuesten Technologie von MS werden über 10 Jahre alt, als Sie im Vergleich mit anderen ORM-frameworks)
  • ist in Erster Linie das Abfragen "Sprache" unterstützt intellisense (compiler prüft die syntax Ihrer Abfrage)
  • ist in Erster Linie mit Microsoft SQL Server
  • closed source

NHibernate:

  • ist ORM-tool
  • hat ziemlich begrenzte Abfragesprache, ohne intellisense
  • kann verwendet werden mit fast alle DBMS, für die Sie einen DB-provider
  • open source

Es hängt wirklich.Wenn Sie bei der Entwicklung einer Rich (Windows) - desktop-Anwendung, wo Sie brauchen, um zu konstruieren, die Objekte, mit Ihnen zu arbeiten, und am Ende beibehalten werden Ihre änderungen, dann würde ich empfehlen, ORM-framework wie NHibernate.

Wenn Sie eine Webanwendung entwickeln, die in der Regel nur Daten Abfragen und nur gelegentlich schreibt einige Daten zurück in die DB, dann würde ich empfehlen, gute Abfragesprache, wie Linq.

So wie immer, es hängt davon ab.:-)

Andere Tipps

Errr...es gibt Für NHibernate LINQ.

Vielleicht, was Sie bedeuten, ist, die zu verwenden:

  • LINQ to SQL
  • NHibernate

Ich bevorzuge NHibernate.

LINQ to SQL ist ziemlich leicht, aber es ist ein bisschen mehr fest gekoppelt an Ihre Daten-Struktur, im Gegensatz zu NHibernate, die ziemlich flexibel in Bezug auf die Arten von Objekt-Definitionen zugeordnet werden können, um Ihre Tabellen-Strukturen.

Das ist natürlich nicht zu sagen, dass LINQ to SQL hat keine verwendet:genau diese Webseite nutzt es.Ich glaube, dass es ganz nützlich sein, um aufzustehen und läuft in kleinen Anwendungen, bei denen das Datenbank-schema nicht so Massiv.

Beginnen Sie mit NHibernate ist eine schlechte Idee.Es zeigt eine gute Leistung nur mit gekonnt Einstellungen.Versuchen, zu verwenden EFv4 für große Projekte und L2S (vielleicht 3-Teil Produkte) für kleine und mittlere Größe.Diese Produkte sind mehr bequem und flexibel als NHibernate und erlauben Sie zu schnell beginnen.

keine vollständige Liste

LinqToSQL Pro:

  • bessere tool-Unterstützung
  • gute linq-Anbieter
  • leicht zu beginnen, wenn das db-schema - = = - Klassen -

Con:

  • nicht flexibel (also db-schema != Klassen)
  • unterstützt nur MS SQL Server
  • keine Kaskadierung (speichern, aktualisieren ...nicht-Kaskade, um referenzierte Objekte)

NHibernate Pro:

  • viele rdbms unterstützt ootb
  • feature-reiche
  • sehr flexibel für fast alle Fälle Ecke
  • open source

Con:

  • nicht so einfach zu starten mit
  • nicht von MS
  • es gibt viele Werkzeuge, aber Sie haben suchen für

Zwischen dem 2 ORMs

ich würde wählen, LinqToSql, wenn:

  • db-schema - = = - Klassen
  • immer nur mit MS SQL Server
  • shop erlaubt nur MS-Produkte

ich würde wählen, Nhibernate, wenn:

  • reicher objectmodel
  • legacy-db-schema
  • DB außer MS SQL Server oder Unterstützung mehrerer
  • performance-kritisch (ich denke, NH hat mehr Funktionen zur Optimierung der Leistung als LinqToSql)

HINWEIS:dies ist meine persönliche Ansicht.Ich beschäftige mich hauptsächlich mit (verrückt) legacy-Datenbanken und komplexen ETL-Aufträgen, wo der Objekt-Modell hilft, eine Menge über SQL.

Ich don ' T verwenden (oder sogar wissen) NHibernate, ich möchte mein Zeugnis:Ich benutze LINQ zu SQL seit über 2 Jahren mit MySQL-und PostgreSQL-Datenbanken (mit DbLinq auf Windows mit Hilfe von Mono auf Linux-und Mac OS X).

So LINQ to SQL ist NICHT beschränkt auf die Microsoft-Produkte.

Ich kann bestätigen, dass LINQ to SQL ist sehr gut geeignet für mittlere und kleine Projekte oder große Projekte, in denen Sie die absolute Kontrolle über die Struktur der Datenbank.Wie die Bewertungen zeigen, LINQ to SQL hat einige Einschränkungen, die es einem ungeeigneten Werkzeug, wenn es keine direkte Zuordnung zwischen den Tabellen der Datenbank und entity-Klassen.

Hinweis :LINQ to SQL nicht Unterstützung viele-zu-viele-Beziehungen (aber dies kann einfach erreicht werden mit ein paar code-Zeilen).

Der größte Nachteil von NHibernate ist die Unfähigkeit zu verwenden Methodenaufrufe.Sie lassen sich nicht in SQL übersetzt.Zu umgehen, müssen Sie zum erstellen von ausdrucksbaumstrukturen, die ist schwierig zu tun.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top