Welches ORM ist am besten, wenn gespeicherte Prozeduren verwendet werden

7

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.

    
Jojo 26.03.2009, 22:13
quelle

8 Antworten

7

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.

    
John Sheehan 26.03.2009, 22:57
quelle
5

Subsonic hat eine flexible Lösung:

%Vor%

Dann:

%Vor%

Subsonic ist ein solides "Schweizer Armeemesser" ORM.

    
David Robbins 26.03.2009 23:08
quelle
5

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:

  1. Ein Multi-Mapper, der Ihnen einzelne Zeilen zu mehreren Objekten
  2. erlaubt
  3. Eingabe / Ausgabe / Rückkehr param Unterstützung
  4. Eine erweiterbare Schnittstelle für db-spezifische Parameterbehandlung (wie TVPs)

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.

    
Sam Saffron 11.07.2011 04:51
quelle
2

Abhängig von der Datenbank Entity Framework oder NHibernate sind wahrscheinlich die besten Optionen (Beispiele in Links).

    
Tracker1 26.03.2009 22:31
quelle
1

Der LINQ to SQL-Designer gibt Ihnen typsichere Sprocs als Methoden für das DataContext-Objekt. Sie können diese Objekten relativ einfach für CRUD-Operationen zuordnen.

Tatsächlich bin ich dabei, genau das zu tun.

    
Randolpho 26.03.2009 22:17
quelle
1

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 ...

    
Adam Jaskiewicz 27.03.2009 14:43
quelle
0

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.

    
pete blair 27.03.2009 14:52
quelle
0

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;)

    
eglasius 26.03.2009 22:34
quelle