Ich bin ein wenig verwirrt über Dataset im Vergleich zu ORM (NHibernate oder Spring.Net). Aus meiner Sicht befindet sich das ORM zwischen der Anwendungsschicht und der Datenbankschicht. Es generiert die SQL-Befehle für die Anwendungsschicht. Ist das dasselbe wie was Dataset tut? Was ist der Unterschied zwischen Dataset und ORM? Was sind die Vor- und Nachteile für diese beiden Methoden? Ich hoffe, die Experten hier können etwas erklären.
Danke, Fakhrul
Es gibt einen großen Unterschied zwischen ihnen, vor allem wegen des Programmiermodells, das sie repräsentieren:
Wie andere vor mir antworten, ist es wichtig zu sehen, was Microsoft über Dataset sagt und besser, was Wikipedia über ORM sagt, aber ich denke (das war für mich am Anfang), es ist besser, den Unterschied zwischen ihnen zu verstehen Modell. Das zu verstehen, wird nicht nur die dahinterstehenden Entscheidungen klären, sondern es auch zu einfach machen, sich einem Werkzeug selbst zu nähern und es zu verstehen.
Als kleine Erklärung ist es möglich zu sagen:
ist ein Modell, das dazu tendiert, tabellarische Daten in einer Speicherstruktur so nah wie möglich (und sogar nach Bedarf) darzustellen. Es ist daher einfach, Implementierungen zu finden, die Konzepte wie Tabelle , Spalten , Beziehungen implementieren, sodass das Modell auf die Tabellenstruktur, also die Objektausrichtung, ausgerichtet ist basiert darauf nicht auf Daten selbst. Dieses Modell könnte seine eigenen Vorteile haben, aber in einigen Fällen könnte es schwierig sein, Konzepte auf enthaltenen Daten zu verwalten und schwer anzuwenden. Wie frühere Antworten sagen, zwingen Implementierungen wie Dataset, let oder besser Sie dazu, SQL-Anweisungen (auch wenn sie mit einem Tool arbeiten) zu erstellen, um Aktionen über die Daten auszuführen.
ist ein Modell, das (wie mendelt vor mir sagt ..) wo Objekte direkt auf Datenbankobjekte abgebildet werden, hauptsächlich Tabellen und Ansichten (auch wenn es möglich ist, zu mappen sogar Funktionen und Verfahren zu). Dies geschieht im Allgemeinen auf zwei Arten, mit einer Mapping-Datei, die das Mapping beschreibt, oder mit (im Falle von .NET oder Java) Code-Attributen. Dieses Modell basiert auf Objekten , die die Daten repräsentieren, so dass die Objektausrichtung wie bei normalen Programmen auf ihnen vorgenommen werden kann. Dies ist in bestimmten Fällen mit mehr Aufmerksamkeit und Vorsicht klar, aber im Allgemeinen, wenn Sie sich sicher sind ORM könnte ein wirklich mächtiges Werkzeug sein! Sogar ORM könnte schwer zu verwalten sein, wenn es nicht gut verwaltet und entworfen wird, oder besser verstanden wird, also ist es wichtig, Techniken zu verstehen, aber ich kann mit meiner Erfahrung sagen, dass ORM ein wirklich mächtiges Werkzeug ist. In ORM ist das Werkzeug hauptsächlich dafür verantwortlich, die benötigten SQL-Anweisungen zu erzeugen, da Operationen in Code ausgeführt werden, und in vielen Fällen hat ORMs eine mittlere Sprache (wie HQL), um Operationen für Objekte auszuführen.
Ein Mapper ist ein Werkzeug, das nicht wie ein ORM aussieht, sondern handgeschriebene SQL-Anweisungen einem Objektmodell zuordnet. Diese Art von Werkzeug könnte eine bessere Lösung sein, wenn es erforderlich ist, SQL-Anweisungen per Hand zu schreiben, aber ein Anwendungsobjektmodell zur Darstellung von Daten entworfen werden soll. In diesem "Modell" werden Objekte dem Befehl zugeordnet und in einer Zuordnungsdatei beschrieben (in der Regel eine Xml-Datei wie iBatis.Net oder iBATIS (Java)). Mit einem Mapper können Sie granulare Regeln in SQL-Anweisungen definieren. In diesem Szenario könnte es leicht sein, einige ORM-Konzepte wie beispielsweise das Sitzungsmanagement zu finden.
ORM und Mapper lassen einige sehr interessante Design Patterns anwenden, die nicht so einfach auf ein Tabellenmodell und in diesem Fall auf ein Dataset angewendet werden können.
Zunächst entschuldigen Sie mich für diese lange Antwort und über mein schlechtes Englisch, aber für mich macht eine Antwort wie diese den Unterschied zwischen diesen Modellen und dann zwischen Implementierungen in der Vergangenheit gut verständlich.
Die Dataset-Klasse ist definitiv kein ORM; Ein ORM bildet relationale Daten mit einer objektorientierten Darstellung ab.
Es kann jedoch als eine Art 'Arbeitseinheit' betrachtet werden, da es die Zeilen verfolgt, die gelöscht / aktualisiert / eingefügt werden müssen.
ORM basiert auf dem Mapping zwischen Objekten und Tabellen. Nicht der Fall für diesen Datensatz. Dataset ist selbst in einer Art und Weise direkt an den Tisch. ORM basiert auf einem Minimum an SQL-Skript. Aber genug, um das Dataset zu verwenden, schreiben Sie SQL-Klausel. Dataset ist in diesem Fall kein ORM.
Nein, Datensätze sind keine ORMs. Sie können wie Orms aussehen, da Datasets Tabellen zu Objekten zuordnen. Wie bei ORM besteht der Hauptunterschied darin, welchen Objekten sie zugeordnet sind.
Datasets haben ihre eigenen Tabellen- und Zeilenobjekttypen, die der Struktur der Datenbank sehr ähnlich sind. Sie erstellen einen Teil des relationalen Modells der Datenbank in Objekten neu. Die Beschränkung dieser Objekte auf etwas, das einer relationalen Datenbank ähnelt, löst einige der Probleme, die beim Zuordnen einer Datenbank zu einem Objektmodell auftreten.
Ein ORM bildet die Tabellen und Zeilen aus der Datenbank in Ihr eigenes Objektmodell ab. Die Struktur Ihres Objektmodells kann für Ihre Anwendung optimiert werden, anstatt einer relationalen Datenbank zu ähneln. Das ORM kümmert sich um die Schwierigkeiten bei der Umwandlung eines relationalen Modells in ein Objektmodell.
DataSet ist ein DTO, ein Datenübertragungsobjekt. DataSet selbst kann nichts tun. Sie können einen DataAdapter (des verwendeten Providers) verwenden, um sql zu erzeugen oder vordefinierte Abfragen aufzurufen, tut aber immer noch nichts.