Ich habe Business-Objekte (Entwickler schreiben) und einige SPROCS (DBA WRITE)
Kann jemand einen guten Objekt-Mapper empfehlen, um mit dieser Art von Setup umzugehen?
Ich habe Codesmith und Nhibernate ausprobiert und hatte Probleme. Es macht mir nichts aus, wenn mein ORM frei oder bezahlt ist.
SubSonic unterstützt Sprocs sehr gut. Es wird jedes in einer Hilfsmethode umbrechen und Sie können stark typisierte Auflistungen oder Entitäten aus den Ergebnissen abrufen, wenn Sie möchten. Ich zeige einen Weg, dies in diesem Blogpost zu tun. Solange Ihr Sproc dasselbe Schema wie SELECT * FROM TableName zurückgibt, wird es mit Ihren SubSonic-Entitäten funktionieren.
Was das Generieren von Klassen auf der Basis Ihrer db betrifft, erzeugt SubSonic partielle Klassen, so dass Sie diese nach Bedarf erweitern können. Sie können auch Zuordnungen von SubSonic-generierten Klassen zu Ihrem tatsächlichen Modell erstellen.
Subsonic hat eine flexible Lösung:
%Vor%Dann:
%Vor%Subsonic ist ein solides "Schweizer Armeemesser" ORM.
Disclaimer: Ich bin der Autor von Dapper .
Wenn Sie nach einem einfachen Objekt-Mapper suchen, der Zuordnungsprozesse zu Geschäftsobjekten behandelt Dapper passt gut.
Denken Sie daran, es wird ohne "Graph Management", "Identity Map" und so weiter geliefert. Es bietet eine knappe, vollständige Lösung, die viele Szenarien abdeckt, die andere ORMs nicht haben.
Nichtsdestotrotz bietet es einen der schnellsten Objektverarbeiter, der 10x schneller als EF oder sogar 100x schneller sein kann als subsonic in einigen Benchmarks zu schreiben.
Das Triviale:
%Vor%Kann wie folgt zugeordnet werden:
%Vor%Zusätzlich haben Sie Unterstützung für:
Also zum Beispiel:
%Vor%Kann zugeordnet werden mit:
%Vor%Schließlich kann Dapper auch eine benutzerdefinierte Parameterimplementierung zulassen:
%Vor%Bei der Implementierung dieser Schnittstelle können Sie ablesen, welche Parameter Sie Ihrem Befehl hinzufügen möchten. Auf diese Weise können Sie Tabellenwerte und andere DB-spezifische Funktionen unterstützen.
Abhängig von der Datenbank Entity Framework oder NHibernate sind wahrscheinlich die besten Optionen (Beispiele in Links).
Da du einen DBA hast, der die Sprocs schreibt, würde ich denken, dass es das Beste wäre, eng mit ihm zusammenzuarbeiten, um herauszufinden, wie man die Tabellen Objekten zuordnen kann und wie man die Datenbank so strukturiert, dass sie funktioniert mit Ihrem Domain-Modell. Mit Sprocs ist nichts falsch, sie erfordern nur eine enge Zusammenarbeit zwischen den Entwicklern und den DBAs.
Idealerweise ist der betreffende DBA Teil Ihres Projektteams ...
Ich mag die Art, wie das Entity Framework Sprocs gerade behandelt. Sie können Sprocs den Crud-Operationen einer Entität zuordnen, es erkennt sogar, welche Sprocs mit den Eigenschaften Ihrer Entität übereinstimmen. Der eine große Nachteil im Moment ist, wenn Sie einen Sproc mit einer Entität verknüpfen, müssen Sie alle Crud-Operationen mit einem Sproc verknüpfen.
Dieser EF Sproc Artikel hat einige großartige Beispiele dafür, wie man in EF Sprocs benutzt und hat dafür auch einige sehr schöne Erweiterungsmethoden.
Das Hauptproblem, das ich dabei sehe, ist, dass Sie mit SP automatisch viel Flexibilität verlieren, wenn Sie ORM verwenden, insbesondere beim Abruf von Informationen. Aus diesem Grund bin ich sicher, dass Sie nicht alle Funktionen der meisten ORM verwenden können.
Wenn Sie beispielsweise linq2sql verwenden, haben Sie ziemlich viele Wrapper für die SPs. Sie können Einfügungen, Löschungen und Aktualisierungen der generierten Entitäten auch gespeicherten Prozeduren zuordnen. Wo Sie viel verlieren, ist das Abrufen von Informationen, sowohl weil die Abfragen jetzt behoben sind (und Sie möglicherweise mehr Informationen abrufen als erforderlich, d. H. Zusätzliche Spalten - oder erstellen Sie viele SPs) und auf lazy loading.
Update: Ich bin eher ein linq2sql-Typ, aber ich würde einen zweiten Blick auf die Annahmen werfen, die Sie über NHibernate machen. Insbesondere bezweifle ich, dass es die Spaltenreihenfolge erzwingen wird, da es mit Spaltennamen konfiguriert ist (siehe Ссылка ). Es unterstützt auch etwas, das ich nicht mit linq2sql zu tun weiß: Ссылка . Beachten Sie, ich meine nicht, dass die letzte nicht mit linq2sql unterstützt wird, nur dass ich nicht weiß, wie;)
Tags und Links .net c# database stored-procedures orm