2010-04-25 19 views
13

Ich bin eine Anwendung zu entwickeln, die diese Klassen haben:Welches ORM zu verwenden?

class Shortcut 
{ 
    public string Name { get; } 
    public IList<Trigger> Triggers { get; } 
    public IList<Action> Actions { get; } 
} 

class Trigger 
{ 
    public string Name { get; } 
} 

class Action 
{ 
    public string Name { get; } 
} 

Und ich werde 20+ mehr Klassen, die von Trigger oder Action, so dass am Ende zufließen wird, werde ich eine Shortcut Klasse, 15 Action - abgeleitete Klassen und 5 Trigger - abgeleitete Klassen.

Meine Frage ist, welche ORM passt am besten für diese Anwendung?EF, NH, SubSonic oder vielleicht noch etwas anderes (Linq2SQL)?

Ich werde in regelmäßigen Abständen neue Anwendungsversionen freigeben, weitere Trigger und Aktionen hinzufügen (oder aktuelle Trigger/Aktionen ändern), so dass ich auch das Datenbankschema aktualisieren muss. Ich weiß nicht, ob EF oder NH irgendwelche guten Methoden zur einfachen Aktualisierung des Schemas bietet. Oder wenn sie es tun, gibt es eine Anleitung, wie man das macht?

ich schon this Artikel über NH Schema Aktualisierung gefunden, unter Angabe:

Zum Glück NHibernate uns die Möglichkeit bietet, ein vorhandenes Schema zu aktualisieren, dh NHibernate ein Update-Skript erstellt, das die auf die angewendet werden kann, Datenbank.

Ich habe nie gefunden, wie man das Update-Skript tatsächlich erzeugt, so kann ich NH nicht sagen, um das Schema zu aktualisieren. Vielleicht habe ich etwas falsch verstanden, ich habe es einfach nicht gefunden.

Hinweis: Wenn Sie EF vorschlagen, ist EF 1.0 auch geeignet? Ich würde lieber etwas älteres .NET als 4.0 verwenden.
Hinweis 2: Das ORM-Framework sollte für kommerzielle Zwecke frei sein.
Hinweis 3: Ich werde auch Code-Verschleierung verwenden, alle Symbole zufällig umbenennen usw. ... so sollte ORM dies unterstützen.

+0

Sind Sie an die Verwendung einer relationalen Datenbank gebunden? Sie könnten überlegen, ob eine Objekt- oder Dokumentendatenbank für Ihre Arbeit besser geeignet wäre. –

+0

Wie aktualisiere ich ein Skript? 'Neues SchemaUpdate (_cfg) .Execute (wahr, falsch);' – dotjoe

+0

@Erik Forbes: Ich würde ODBMS verwenden, wenn es irgendeine verwendbare freie Objektdatenbank geben würde (etwas wie SQLite für RDBMS). Kennst du irgendwelche? – Paya

Antwort

7

Vor .NET 4 war Entity Framework einfach nicht reif genug für meinen Geschmack. Außerdem unterstützt es keine POCOs.

Mit EF out, würde ich NHibernate auswählen. Um die Konfiguration Code-basiert und etwas einfacher zu machen, würde ich auch Fluent NHibernate verwenden. NHibernate ist sehr ausgereift und hat viele Community-Unterstützung. Es bietet eine hervorragende Möglichkeit, das Datenbankschema aus dem neuesten Code zu aktualisieren. Sehr empfehlenswert.

Ich glaube nicht, dass eine der anderen ernsthafte Optionen sind. Das Entity Framework wird schnell einen Anteil gewinnen, da es von MS integriert und ernsthaft vermarktet wird. NHibernate wird ein lebensfähiger Konkurrent bleiben, da es viel Popularität und Reife hat. Der Rest wird langsam auf der Strecke bleiben, bis sie nur noch von wenigen begeisterten Anhängern benutzt werden.

+0

Ich stimme völlig zu .. Ich würde NHibernate verwenden. Es passt sich perfekt Ihren Anforderungen an und macht Datenbank-Updates sehr einfach. – Tigraine

+1

1) Und was ist mit EF 4.0? Obwohl ich sagte, dass ich .NET 4.0 nicht möchte, bin ich nur neugierig, ob EF 4.0 für meine Anwendung wie NHibernation verwendbar ist. 2) Gibt es ein gutes Tutorial zum Aktualisieren des Datenbankschemas in Fluent NHibernation? Ich kann nichts finden. – Paya

+0

+1 für NHibernate zusammen mit Fluent-NHibernate. Ich würde jedoch Fluent-Migrations für die Schema-Updates hinzufügen. Es macht es schmerzlos, genau wie die Jungs es haben. – mxmissile

0

Siehe DataObjects.Net: Obwohl es kommerziell ist, gibt es Funktionen, die Sie benötigen (z. B. Schema-Upgrade).

+0

Danke, aber ich würde eine freie Lösung bevorzugen. Sollte es in Frage geschrieben haben, sorry. – Paya

6

Ich glaube, Sie vergleichen zwei getrennte Klassen von Systemen hier:

  • SubSonic und Linq-to-SQL ist ziemlich einfach, dünne Schicht auf eine Datenbank. Sie bieten grundsätzlich nur eine 1: 1-Zuordnung zwischen einer Datenbanktabelle und einem Domänenobjekt. Wenn das für Ihren Fall gut genug ist, dann sind diese Tools die einfachsten, die am einfachsten zu bedienenden ORMs.

  • EF in .NET 4 und NHibernate sind in einer ganz anderen Klasse - sie bieten Enterprise- Level-Features, sie unterstützen mehrere Datenbanken, sie unterstützen das Mapping und Morphing Ihrer Datenbankstruktur in eine anders aussehende Domain-Struktur, und sie sind gut darin. EF4 unterstützt auch POCO, und alle Probleme, die früher mit EF behandelt wurden, sind mit der .NET 4-Version von Entity Framework ziemlich kompliziert.

    Aber sowohl NHibernate und EF4 sind komplexer, sie erfordern mehr Setup, mehr Lernkurve, bis Sie es "bekommen", sie sind ein bisschen schwerer auf ihren Füßen, sie haben zusätzliche Mapping-Schichten, die diese erweiterten Funktionen ermöglichen, aber Sie kosten auch Leistung und machen die Dinge im Allgemeinen komplizierter.

Also ich denke, es läuft darauf hinaus wirklich, was Ihre Anforderungen sind: wenn Sie eine ziemlich einfache und leicht benötigen System zu verwenden, gehen Sie mit Linq-to-SQL oder Subsonic. Wenn Sie mehr Funktionen auf Unternehmensebene benötigen und sich nicht um die zusätzliche Arbeit kümmern müssen, die zum Einrichten dieser ORMs erforderlich ist, wählen Sie EF4 oder NHibernate.

+0

Nun, ich brauche nicht einige komplexe Funktionen, ich möchte einfach so meine Objekte speichern, so dass ich ADO.NET nicht tun muss. Und ich muss _anything_ in Zukunft anpassen können, so dass das Framework ein einfaches Anpassen ohne zu viele Hacks ermöglichen sollte. Zum Beispiel, wenn ich den Spaltentyp ändere, sollte es nicht zu viel Umgestaltung erfordern. Und das Datenbankschema wird ziemlich oft aktualisiert, also brauche ich auch ein Framework, das dafür ausgelegt ist. – Paya

+0

@Paja: Wenn Sie ausschließlich SQL Server verwenden, verwenden Sie Linq-to-SQL. Wenn Sie mehr Datenbankunterstützung benötigen, verwenden Sie Subsonic. –

+0

Ich denke Linq2SQL ist gut genug. Ich habe jedoch gelesen, dass MS es aufgibt. Lohnt es sich, eine Bewerbung zu schreiben? Und wenn ich auch möchte, dass das System eine Datenbank-Abstraktionsschicht ist, was würden Sie empfehlen? – Paya

Verwandte Themen