tutorial - nhibernate.net core




Leichte Alternativen zu NHibernate (6)

NHibernate passt aufgrund unserer Abhängigkeiten nicht wirklich zu unserer Umgebung. (Burg, log4net usw.)

Gibt es eine gute leichte Alternative?

Die Unterstützung für einfache dateibasierte Datenbanken wie Access / SQLite / VistaDB ist unerlässlich.

Idealerweise ist etwas in einer einzigen Assembly enthalten, die nur auf .NET-Assemblys verweist. Wenn es nur .NET Framework 2.0 oder 3.0 erfordert, ist das ein Bonus.


Für ein leichtgewichtiges ORM, das gut funktioniert und nur eine einzige Baugruppe benötigt, probieren Sie Lightspeed von Mindscape aus. Es ist nicht Open-Source, aber die Quelle ist verfügbar und es ist preiswert - das Risiko bei den meisten ORM's, die nicht gut angenommen werden, ist natürlich Qualität und Niveau der Unterstützung, und es gibt nur wenige andere Open Source ORMs, mit denen man sich beschäftigen muss. Netto-Speicherplatz im Moment.

Wegen Ihrer Abneigung gegen die Abhängigkeiten von NHibernate klingt es so, als ob Sie keinen Logging-Rahmen oder eine der Projektfacetten des Schlosses benötigen, zB IoC, Monorail usw. Haben Sie vielleicht nur ein Minimum an NHibernate-Anforderungen (log4net und Iesi Sammlungen, die ich glaube, und dynamische Proxy aus dem Schloss-Projekt?) Und ILMerge laufen über sie, um sie in einer einzigen Baugruppe zu konsolidieren - könnte ein bisschen fummeln, aber es ist nicht zu schwer - oder alternativ könnte man einfach den Quellcode ziehen Jedes dieser Projekte wird zu einem benutzerdefinierten Build von NHibernate, den Sie für Ihre Organisation pflegen, der die von Ihrem Projekt / Ihrer Organisation nicht benötigten Funktionen entfernt - es ist nicht so hart / akkiv, wie es sich anhört, und ich habe etwas für ein Projekt getan, bei dem Wir wollten von einem ORM profitieren, mussten aber die Größe der verteilten Dateien / Installer reduzieren.

Auch - können Sie vielleicht erklären, was Sie für eine Nhibernate-basierte Lösung als zu "schwer" empfinden? Meiner Erfahrung nach ist es ein relativ leichtgewichtiges ORM-Framework im Vergleich zu einigen.


LINQ to SQL könnte eine gute Alternative zu "HEAVEN" ORM-Systemen sein, wenn Sie es richtig verwenden.


einige der alternativen:
- ActiveRecord - es verwendet nhibernate.dll im Hintergrund, aber die Konfiguration erfolgt über Attribute. Es ist wie eine Lite-Version von Nhibernate
- Subsonic
- CoolStorage.NET - Ich habe es oft bei kleinen Projekten verwendet. Funktioniert gut mit der Anzahl von dbs


Wenn Sie dieser Liste hinzufügen, können Sie sich auch Dapper ansehen (das von selbst geschrieben und verwendet wird).


Wenn Sie kein voll funktionsfähiges ORM benötigen und nur eine schnelle, datenbankunabhängige Datenschicht über ADO.NET benötigen, dann testen Sie die Open Source NI.Data-Bibliothek (V2) . Es ist sehr leicht (nur eine kleine Baugruppe, keine anderen Abhängigkeiten), bietet alle Standard-Datenschicht-Infrastruktur:

  • Abfrage Abstraktion und Parser für seine String-Darstellung namens 'Relex' (es sieht aus wie: "Bücher (Rating = 5) [Titel, Id]" - sehr gute Alternative zu Linq-to-SQL und Ausdrücke können on the fly komponiert werden)
  • "View" -Konzept zur Kapselung komplexer DB-Syntax-abhängiger SQL-Abfragen
  • Datenauslöser
  • Datenschicht Berechtigungen für Auswahl / Aktualisieren / Löschen von Abfragen
  • Von der Box werden MS SQL-, SQLite-, MySQL-, Odbc / OleDb-Provider (MS Access) unterstützt. Unterstützung für andere SQL-Datenbanken könnte problemlos hinzugefügt werden.

Seine Hauptkomponente (DALC) wurde nur mit einer Codezeile initialisiert:

var dalc = new DbDalc(new SqlClientDalcFactory(), connectionStr);

das ist alles. Wenn Sie .NET 2.0-Runtime-Unterstützung benötigen, können Sie versuchen, die neueste V2-Version unter 2.0 Runtime zu kompilieren oder eine frühere Legacy-Version (NI.Data.Dalc, V1) zu verwenden.


Im Allgemeinen benötigen Sie einen ADO.Net-Provider, damit Ihr Datenbank-Backend mit .net funktioniert.

Für MS Access (Jet) wird der Provider mit .net ausgeliefert. Für SQLite gibt es einen selbständigen ADO.Net Provider.

Wie für die Datenzugriffsschicht lib, wenn Sie etwas Abstraktion über ADO.Net wollen:

Alle funktionieren gut, beginnend mit Framework 2.0 und höher.

Grundsätzlich wählen Sie (und es gibt eine große Auswahl)





orm