Frage

Ich entwerfe derzeit eine kleine CRUD-Anwendung.Ihre Datenbank ist ein riesiges Durcheinander und wird sich im Laufe der nächsten 6 Monate bis zu einem Jahr häufig ändern.Was würden Sie für meine Datenschicht empfehlen:

1) ORM (wenn ja, welches?)

2) Linq2Sql

3) Gespeicherte Prozeduren

4) Parametrisierte Abfragen

Ich brauche wirklich eine Lösung, die dynamisch genug ist (sowohl schnell als auch einfach), sodass ich häufig Tabellen ersetzen und Spalten hinzufügen/löschen kann.

Notiz:Ich habe nicht viel Erfahrung mit ORM (nur ein wenig SubSonic) und tendiere im Allgemeinen dazu, gespeicherte Prozeduren zu verwenden, also wäre das vielleicht der richtige Weg.Ich würde gerne Ling2Sql oder NHibernate lernen, wenn beides die oben beschriebene Situation zulässt.

War es hilfreich?

Lösung

Eine wichtige Sache, die Sie hier beachten sollten, ist, dass Sie bei häufigen Änderungen des Datenbankschemas ein gewisses Maß an Typsicherheit zur Kompilierungszeit haben möchten.Ich habe festgestellt, dass dies ein Problem mit NHibernate darstellt, da es XML-Zuordnungsdateien verwendet. Wenn Sie also etwas an Ihrem Datenbankschema ändern, wissen Sie erst zur Laufzeit, dass die Zuordnung fehlerhaft ist.

Es wird auch ein Problem mit gespeicherten Prozessen geben.

Die Verwendung von Linq2Sql bietet Ihnen den Vorteil, dass Sie genau wissen, wo Ihr Code fehlerhaft ist, wenn Sie ein Schema zur Kompilierungszeit ändern.Dies ist für mich etwas, das Vorrang vor allem anderen hat, wenn ich mit einem sich häufig ändernden Schema arbeite

Andere Tipps

Ich würde mir SubSonic mit dem Build-Provider-Setup (Website-Projekt) ansehen.Das funktioniert hervorragend, da die DAL-Objekte jedes Mal automatisch neu generiert werden, wenn Sie Ihr Projekt erstellen. Wenn sich also die Datenbank auf eine Weise ändert, die Ihren Code beschädigt, erhalten Sie einen Build-Fehler.

Es funktionierte gut, bis das Datenbankschema wirklich komplex wurde und wir an die Grenzen des ActiveRecord-Musters stießen, aber solange das Schema nicht sehr komplex ist, funktioniert es ziemlich gut.Sobald sich das Schema stabilisiert hat, können Sie wechseln, sodass Sie die DAL nur dann erstellen, wenn Sie möchten.

Sie möchten auf jeden Fall ein ORM verwenden.Jedes ORM ist in Ordnung, aber Sie möchten etwas, das stark typisierte Klassen generiert.Wenn Felder einer Tabelle hinzugefügt, geändert oder gelöscht werden, möchten Sie in der Lage sein, diese Klassen neu zu generieren und sich nur mit der Behebung von Fehlern bei der Kompilierung zu befassen.Wenn Sie ein dynamisches Modell verwenden, treten wahrscheinlich viele schwerwiegende Laufzeitfehler auf.Dies ist sehr wichtig!Ich bin Teil davon Meine Generation Entwicklungsteam auf SourceForge, und ich denke, das ist eine großartige Lösung für Ihr Problem.Sie können dOOdads, NHibernate, EasyObjects, EntitySpaces usw. generieren.Wenn Sie sich für eine teurere Lösung entscheiden möchten, entscheiden Sie sich für CodeSmith oder LLBLGen Pro.Viel Glück – wer sich für die Nutzung von MyGeneration interessiert, kann sich bei Fragen gerne an mich wenden.

NHibernate, aber nur, wenn Sie für einen objektorientierten Ansatz bereit wären, bei dem Sie Ihre Klassen definieren und dann Ihre gewünschte Tabellenstruktur in den Zuordnungsdateien definieren und dann ein Datenbankschema mithilfe der integrierten Schemagenerierungsklassen von NHibernate erstellen.

Ich habe herausgefunden, wie man es umgekehrt macht (z. B. Sie haben eine Reihe von Tabellen und stützen dann Ihr Objektdesign darauf). Meine Generation + NHibernate funktioniert, obwohl ich mit den resultierenden Klassen nicht besonders zufrieden bin (hauptsächlich, weil ich so ein Anhänger der echten objektorientierten Programmierung bin).

An Ihrer Stelle würde ich versuchen, mein Wissen (sprocs) mit Linq2Sql zu nutzen.Linq2Sql kann weiterhin Ihre Sprocs verwenden, aber dann haben Sie den zusätzlichen Vorteil, dass Sie ein neues Werkzeug in Ihren Gürtel stecken.Ich denke, ein Verständnis für die Syntax und Methodik von Linq2XXX (wobei Linq über eine Sammlung von Objekten ist sehr süß.

Aber letztendlich wird Ihnen so etwas wie NHibernate auf lange Sicht besser passen.

EntitySpaces kann Ihre DAL/Business-Schicht in einer Minute und ohne Codeverlust neu generieren, siehe Testversion ==> HIER

Keine Registrierung erforderlich, läuft auch unter Visual Studio.

Verwenden Sie EntitySpaces.Du schickst mir garantiert Blumen.einfach toll.Ändern Sie die Datenbank nach Ihren Wünschen.Drück den Knopf, zack.Alle Ihre Änderungen sind abgeschlossen.ohne Ihren benutzerdefinierten Code zu ändern.Ich liebe es.

Wie einfach ist die Anwendung?Wenn ich ein paar Monate lang mit Schema-/Design-Sachen arbeiten würde und mich nicht wirklich um eine tatsächliche App kümmern würde...Ich würde die Verwendung von EDM und einem Dynamic Data Entities-Webanwendungsprojekt in Betracht ziehen.Meiner Meinung nach kommt man damit mit dem geringsten Aufwand in Schwung.So können Sie sich auf Schemata, Daten und andere wichtige Dinge konzentrieren.Hoffentlich bekomme ich nicht zu viele Negativbeulen davon!

So wird der neue Projektdialog aussehen Das

Sie sind bereits mit gespeicherten Prozessen zufrieden und sie könnten ausreichen, um das sich ändernde Schema zu abstrahieren.Wenn ORMs mit gespeicherten Prozessen nicht zufrieden sind, arbeiten sie möglicherweise mit Ansichten, die Sie über das sich ändernde Schema auf dem neuesten Stand halten.

Wenn sich das Datenbankschema häufig ändert, bevorzugen Sie das Entity Framework gegenüber LINQ2SQL.Wenn sich das Schema ändert, müssen Sie L2S verwenden
1) Entfernen Sie Ihre Tabelle und fügen Sie sie erneut hinzu (wobei Ihre Anpassungen verloren gehen).
2) Modifizieren Sie das Modell von Hand (wie hier im Stackoverflow gemacht)

Das EF ist ein Superset von L2S und bietet Ihnen mehr Flexibilität bei der Nutzung und Dbms-Unabhängigkeit

Schauen Sie sich an, warum es sich ändert, und prüfen Sie, ob Sie die Art der auf Sie zukommenden Änderungen vorhersehen und verallgemeinern können, damit Ihr Code dadurch nicht beschädigt wird

Ein Rahmenwerk erleichtert möglicherweise die Anpassung an die Änderungen, eine tiefergehende Analyse wird jedoch längerfristig von Vorteil sein

Jede Lösung kann funktionieren. Was Sie wirklich brauchen, ist eine Reihe von Tests, die garantieren, dass grundlegende Vorgänge wie Einfügen, Auswählen, Aktualisieren und Löschen funktionieren.Auf diese Weise können Sie einfach Ihre Tests ausführen und prüfen, ob die Zuordnungen aktuell sind.

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