Subsonic ORM-Erfahrungen
Ich bin auf der Suche nach neuen ORM für ein wichtiges Projekt, verwendet, um im nHibernate mit ActiveRecord und ich habe schon ein sehr schlechtes experiencia mit EF4, performance und Absturz-GUI.
Also Suche auf web fand ich den Subsonic, mochte ich, was ich Lesen Sie in der Dokumentation.
So, ich würde gerne wissen, ob jemand bereits mit der Subsonic-und wenn die Erfahrung war gut.
- Ich habe mochte das Aussehen von Subsonic, aber ich habe nur verwendet, nHibernate, die ich verstehe, ist eine Obermenge der meisten ORMs.... und mit der Fluent version, die ich gefunden nHibernate sehr freundlich zu verwenden.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hmm ... naja ... wie soll ich es sagen....
Ich bin gerade (wie jetzt) Anstrengungen verstärken, ersetzen SubSonic mit PetaPoco. Ich nehme an, dass etwas sagt.
Es ist nicht so, dass SubSonic war schlecht genau, aber es passte nicht meine Art, entwickelt sich sehr gut. Und für Menschen auf der Suche zu erlassen, um es an diesem Punkt, es scheint sehr wichtig zu beachten, dass der absolute Mangel an Aktivität auf das Projekt.
Erste, der größte Grund SubSonic nicht zu mir passen, war LINQ.
Es ist der Reiz, mit compiler-überprüfung aller Eigenschaft zu verwenden, um sicher zu sein. Doch in der Praxis, es war einfach nicht gut geeignet, um Abfragen durchzuführen.
Wenn du dich sehr eng an die Klasse pro Tabelle & ActiveRecord verwenden, ich nehme an, es ist ok. Aber immer, wenn wir mussten jede Abfrage machen darüber hinaus (etwas mit mehreren Tabellen oder irgendetwas jenseits der einfachste where-Klauseln), es war ein Alptraum. Verbände nicht verwendet werden, direkt in ein SubSonic-LINQ-Abfrage, wie Sie in EF oder nHibernate, das war wohl der größte Schmerz-Punkt.
Beispielsweise eine Abfrage wie diese nicht Arbeit im Unterschall, aber es würde in EF:
Wo ich am Ende war, entweder viele round-trips zur Datenbank zu montieren ein Ergebnis, oder mit SubSonic ist
CodingHorror
Klasse Abfragen direkt mit SQL und nicht einfach materialisieren Sie als a POCO (wieder, wenn Sie gehen darüber hinaus einfache Klasse pro Tabelle).Fand ich auch, dass jede LINQ-provider unterstützt verschiedene sets von Operationen, und manchmal die gleiche logische operation haben leicht unterschiedliche syntax und nutzen zwischen den Anbietern. Dies machte das schreiben der meisten Anfragen sehr zeitaufwändig und fehleranfällig. SubSonic LINQ provider gibt keinen Mangel an skurrilen und unter-featured. Es kommen nicht überall in der Nähe Linq-2-SQL, Entity Framework oder LINQ to nHibernate es hinsichtlich der unterstützten Operationen, Nutzbarkeit oder Geschwindigkeit der Ausführung (bereit sein, zu lernen, neue Wege des Schreibens schließt sich in LINQ nur für Unterschall - und bereit sein, haben einige gemeinsame Operationen einfach nicht möglich mit SubSonic-LINQ-provider, trotz der bekannten bugs für ein Jahr).
Neben dem ziehen auf die Produktivität, ist es leicht zu vergessen, dass die LINQ-code, den Sie schreiben ist sehr Anbieter bestimmten. ANSI-SQL ist weit mehr standard-und cross-kompatibel als LINQ.
LINQ auch dazu verführt, mich mit den Möglichkeiten der Wiederverwendung von code mit Techniken wie Spezifikationen, aber die Ausgestaltung dieser war bei weitem nicht einfach, und das Ergebnis war nicht einmal annähernd die Mühe Wert. Die Hindernisse ich gestoßen, hier wurden vor allem aufgrund der Tatsache, dass SubSonic LINQ-Anbieter hatte keine Unterstützung für Vereinigungen.
SubSonic Einrichtungen außerhalb von LINQ, die ich fühlte, waren bestenfalls mittelmäßig (meiner Meinung nach).
Zweitens ist es wichtig zu wissen, dass durch alle Maßnahmen SubSonic ist nicht ein aktives Projekt.
Den ursprünglichen Schöpfer der SubSonic, Rob Conery, nicht mehr an dem Projekt arbeiten. Die letzten commit Rob machte, war im Juli 2010.
Die letzten commit zu dem ganzen Projekt wurde vor 3 Monaten, trotz fast 100 offene Fragen. Und soweit ich sagen kann, es wurde nicht jede Veröffentlichung, nicht einmal ein kleiner Punkt release, da Rob aufgehört zu arbeiten auf SubSonic (obwohl die Leute immer noch hängen rund um das Projekt wurden im Gespräch über eine Veröffentlichung für mehr als ein halbes Jahr).
Die Google-Gruppe für SubSonic verwendet, aktiv zu sein, aber in diesen Tagen nicht so viel. Und auch
die offizielle website für den SubSonic-Projekt wurde gelb-screening-des-Todes für eine Weile(Die Website, nicht mehr gelb-Bildschirme).Die neue Schärfe in Daten zugreifen, ist micro-ORM ist. SubSonic-Ersteller, eigentlich, irgendwie trat dieser trend aus mit Massive, gefolgt bald danach durch die StackExchange-crew die Freigabe Dapper, und später PetaPoco kam. Es gibt ein paar mehr, auch. Und während wir geben einen kleinen compiler überprüfen, dass SQL-snippets in unserer code-Basis, ich finde die micro-ORM passt meiner Entwicklung Stil viel besser als SubSonic hast.
Meine Erfahrung (wenn auch begrenzt) mit nHibernate war, dass es zu kompliziert für die meisten Szenarien, und selbst, wenn es angemessen ist es absolut ermordet meiner Anwendung start-up-Zeiten. Es war auch eine hohe Lernkurve (die Sie möglicherweise Vergangenheit), aber auch da gibt es mehrere Möglichkeiten, das zu tun .. eigentlich alles .. also es kommt noch hinzu, dass viele Entscheidungen in meinem Prozess (Bremsen me down).
Mit PetaPoco kann ich schreiben bekannte SQL - bin ich schnell und Recht gut mit, dass - und materialisieren Sie in POCO ist, das ich weiß, was der Teufel zu tun, mit sofort. Eine kleine Prise-Architektur und Organisation und automatisierte Integrationstests und ich überhaupt nicht fühle mich schmutzig über embedding-bits von SQL.
Oh, und ich nehme an, die Letzte Sache - SubSonic ist bei weitem der Schnellste Weg um Informationen zu bekommen. Kann nicht wichtig sein, aber es stellte sich heraus, dass für uns.
Im Abschluss (sorry für die wall of text):
Es ist nicht so, dass SubSonic ist schlecht in irgendeinem absoluten Sinne. Es ist einfach nicht zu passen scheinen, die Möglichkeiten, die ich habe versucht, es bei allen gut - und ein großer Teil davon ist, weil LINQ ist noch ein leaky abstraction, und es ist undicht in unterschiedlicher Weise als ich es gewohnt bin.
Die Tatsache, dass die Anstrengungen in der Entwicklung sind fast nicht-existent ist gut und schlecht. Gut, es ist stabil und als "fertig" in dem Sinn. Schlecht, es fehlen Funktionen, die möglicherweise einige bugs hat, und ist nicht die beste Darsteller - und es gibt keine arbeiten, zu verbessern.
ExecuteStoreQuery<TEntity>
die ermöglicht das laden von Entitäten aus reinem SQL.Vor einiger Zeit war ich auf der Suche für ein einfaches ORM-für eine kleine Anwendung und SubSonic war genau das, was ich brauchte. Die Einrichtung ist einfach und ich brauchte nicht viel Zeit, um etwas Ausdauer zu meinem domain-Klassen. Was mir daran gefallen hat, war die Möglichkeit zu automigrate das Datenbank-Modell basiert auf der domain-Klassen.
Den Nachteil, dass der Funktionsumfang ist eher begrenzt. Die Dinge, die ich verpasste die meisten war die option zum abrufen kompletter Objekt-Graphen und die Unterstützung von zusätzlichen Indizes. SubSonic hat es als Persistenz-tool für kleine apps, aber ich für wichtige oder große apps, die ich lieber verwenden nHibernate oder eine kommerzielle ORM wie LLBLGen.
Vor der Wahl ein ORM, sollten Sie sich entscheiden, die grundlegenden Anforderungen des Datenzugriffs. Wollen Sie mit der Active-Record-Muster oder das Adapter-Muster? Was über die Parallelität, Leistung, Erbe, etc...
Ich verwendet, Supersonic, es ist so lange gut, wie Sie mit Hilfe einfacher Abfragen. Als ich angefangen habe, komplexere Abfragen, sah ich, dass es keine LINQ-Funktionen. Nach ein wenig googeln habe ich eingeschaltet, um
http://bltoolkit.net
, und von dieser Zeit (etwa 2 Jahren) ich bin sehr glücklich mit ihm. Plus ist einer der schnellsten ORM als prohttp://ormeter.net/
. Schauen Sie es, Sie werden es nicht bereuen.