2009-07-17 3 views
1

Ich habe einige Klassen mit Visual Studio-Klassendiagramm entworfen. Jetzt möchte ich diese Daten mit ORM und vielleicht anderen Persistenzmechanismen persistieren. Ich frage mich, ob es eine Möglichkeit gibt, SQL basierend auf den Eigenschaften in meinen Klassen zu generieren, da sie die benötigte Datenbankstruktur ziemlich gut repräsentieren. Dies würde mir viel manuelle SQL-Eingabe ersparen und mir einen guten Start geben.Soll/kann man ein Datenbankschema von Einsenklassen erzeugen?

Ich habe nicht mit dem Datenbankmodell begonnen, weil ich meine Persistenz von der tatsächlichen "Domänenebene" abgekoppelt haben möchte (nicht sicher, ob dies die korrekte Benennung ist).

Der ORM-Mapper (LLBLGGen) kann dann basierend auf diesem Schema den Code generieren, und ich muss die generierten Objekte nur meiner Persistenz-Schnittstelle zuordnen.

Ist das eine gute Idee, oder bin ich hier auf dem falschen Weg?

Ich habe ein Tool gefunden, das den Job zu erledigen scheint (MindScape LightSpeed), aber leider ist es nur für VS2008 verfügbar.

Antwort

1

Es ist eine schlechte Idee. Klassendesign und Datenbankdesign sind nicht dasselbe.

Persönlich mache ich mein Design auf der konzeptionellen Ebene mit NORMA, ein kostenloses Visual Studio-Add-in. Es generiert das Schema aus dem konzeptionellen Modell und kann auch Klassen generieren.

Die Klassen, die es generiert, sind ein bisschen schwer für meinen Geschmack, aber es stellt sich heraus, die Code-Generierung kann angepasst werden, wenn Sie XSLT nicht fürchten.

Aufgrund der Art der Objektrollenmodellierung können die Einschränkungen, die Sie auf das Modell anwenden, sowohl für das Datenbankschema als auch für ein "Klassenmodell" verwendet werden.

+0

Ich gebe NORMA einen Versuch, danke. –

1

Kommt drauf an. Wenn das Projekt klein ist und Sie einen engen Termin haben. Sicher. Generierter Code ist jedoch fast immer weniger wartbar als handgeschriebener Code. Dies gilt auch für die Generierung von Datenbankschemas. Sehen Sie sich Ihren Projektumfang an. Vielleicht generieren Sie sogar die Datenbank und sehen, ob Sie mögen, wie es aussieht. Entscheide dann für dich selbst. Bewerten Sie für Ihr nächstes Projekt. Eine Größe passt nicht für alle.

+0

Dies ist in der Tat ein kleines Projekt mit einem relativ flachen Datenbankschema. Irgendeine Idee, wie man das macht? (Ich könnte es selbst mit Reflektion tun, aber es würde keine Zeit gespart;)) –

+0

Ich habe dies mit Sparx Enterprise Architect günstig gemacht. Importieren Sie die Klassen, und verwenden Sie dann den Transform-Befehl, um sie in DDL umzuwandeln. Erhalten Sie eine Testversion, wenn dies ein einmaliger Hack ist. –

+0

Ich würde auf jeden Fall ein ORM von Drittanbietern verwenden, um meine eigene Lösung zu erstellen. LLBLGen ist keine schlechte Wahl. Sie könnten auch NHibernate verwenden. –

4

Es gibt viele ORMs, die ein Datenbankschema aus Domänenmodellklassen generieren können. Außerdem gibt es einige ORMs, die speziell für diese Art der Entwicklung entwickelt wurden. Es ist "Model First" oder "Code First" Konzept, und einige Leute denken, dass es eine Zukunft der Entwicklung von Datenbankanwendungen ist, da LINQ SQL jetzt ersetzt. Zum Beispiel wird die nächste Version von Entity Framework dieses Konzept voll unterstützen. Ich kann empfehlen, DataObjects.Net zu versuchen, es generiert und aktualisiert Datenbankschema automatisch und unterstützt LINQ-Abfragen.

+0

Danke für deine Klarstellung Alex, ich werde auch do.net ausprobieren! –

Verwandte Themen