Frage

Führen Sie eine beliebige .Net O / R (Object / Relational) Mapper bieten asynchrone Methoden aus der Box?

Ich will nicht das Kesselblech für die asynchrone Methode, wenn möglich haben, schreiben

Ich habe meine eigene DAL mit asynchroner Methode unter Verwendung des CCR Rahmen gerollt. Die CCR fordert grundsätzlich, dass ich nicht blockieren irgendetwas davon Threads für IO-Antworten warten.

Der gute Teil über meine Lösung so weit ist, dass es bis auf das absolute Minimum ist. Aber da dieses Projekt im Hinblick auf Umfang und Funktionalität wächst, ich bin mit Blick auf die milden gewaltige Aufgabe der Aufrechterhaltung rohe SQL-Abfragen und Kesselblech Code.

Aber auf der anderen Seite, wenn die O / R-Mapper Asynchrone Methoden sind wirklich nur eine unordentliche Hack, der oddles Komplexität fügt bin ich es nicht besser aus.

Bitte konzentrieren nicht auf Alternativen zu asynchroner Programmierung.

War es hilfreich?

Lösung

Während ich bin nicht sicher, ob einer von ihnen tut es aus dem Kasten heraus, könnten Sie .NetTiers , das ist Vorlage basiert. Sie könnten nur die Asynchron-Teile zur Vorlage hinzufügen. Das wäre zumindest beseitigen Sie den Standardcode und nackte SQL-Abfragen pflegen zu müssen. Dieses Blog zeigt, wie async Anrufe an die MS Enterprise Library (die .NetTiers verwenden können, wenn Sie wählen) hinzuzufügen.

Ab Mitte Dezember 2008 hat LLBLGen Pro nicht nativ Asynchron-Anrufe unterstützen. Derzeit Genom auch nicht. Es scheint nicht, dass Telerik entweder der Fall ist. Ziemlich viel gesucht nur ihre Dokumentation und suchte entweder async oder Methoden, die mit Start beginnen, denn das ist das Muster.

lasse ich die anderen Antworten sprechen zu, wenn es eine gute Idee ist oder nicht ...

Andere Tipps

Ja, für SQLAlchemy (eines der besten ORMs), gibt es sAsync:

http://foss.eepatents.com/sAsync

und NADBAPI:

http://developer.berlios.de/projects/nadbapi/

Ich glaube, Sie es falsch. Mein Verständnis ist, dass die asynchrone Ausführung in Ihrem Fall sollte anstelle von ORM Ebene heißt Nachrichtenwarteschlange gesteuerte Architektur auf Architekturebene behandelt werden. Was ich sehe, ist, dass Ihr webserive nur eine Nachricht in der Warteschlange stellen wird, und es gibt eine Art von Hintergrund-Agenten funktioniert die asynchrone Verarbeitung aus der Warteschlange.

Da ich nicht genug Ruf zu kommentieren und Stackoverflow-Warnung des mir noch eine „Antwort“ Einfügen werde ich meinen Kommentar hier lassen.

Lee B: SQLAlchemy? Wie Sie es mit .NET verwenden ???

Abfragen von Daten in einer asynchronen Art und Weise können auf verschiedene Weise erreicht werden. Um es zu einer O / R-Mapper auslagern gibt Herausforderungen, die Sie wahrscheinlich nicht wollen, zu behandeln, da es nicht wirklich machen Sie Ihren Code weniger komplex. Das Hauptproblem ist, dass Sie einen Mechanismus haben, haben die benachrichtigt wird, wenn der Abruf durch den O / R-Mapper abgeschlossen ist, so wird der Anrufer darüber informiert, dass Daten bereit.

Dies ist nicht weniger komplex als ein Thread selbst erstellen und rufen Sie den O / R-Mapper holt Logik aus diesem Thread.

Wie Sie feststellen, dass Sie eine Webservice erstellen möchten, die ansprechbar sein sollte, haben Sie zu erkennen, dass der Anrufer außerhalb des Webservice ist und wartet auf Daten. IOW: wenn der Anrufer den Webservice verwendet, um Daten für das Abrufen, ist es bereits asynchron, wie andere Kunden noch in der Lage sein werden, als auch die webservice zu nennen: die Anforderung des ursprünglichen Anrufers auf einem anderen Thread behandelt wird, Logik der Daten zu holen innen das heißen laufen fädeln, und die Daten werden dann zu dem Aufrufer zurück.

asynchrone Methoden verwenden ist zwecklos hier, da der Anrufer anders mitgeteilt werden müssten, wenn die Daten bereit sind, die sich von der Webservice an den Client einen Push erfordert, die der Kunde an den Webservice in Verbindung zu bleiben erfordert, so lange wie der Abruf dauert sowieso.

Asynchronous db Interaktion ist keine Zauberei Dinge, die man auf etwas werfen, so dass es mehr reagieren wird. Asynchrone db Interaktion könnte der Anrufer andere Dinge tun in der Zwischenzeit machen. Aber wenn das schon nicht nötig, Sie brauchen nicht asynchron db Interaktion mit zu beginnen, die Ihren Code viel weniger komplex machen.

Nhibernate scheint relativ einfacher zu implementieren als Async LinqToSQL. Siehe dieser

Persönlich, was ich tun würde, ist aber Gebrauch, was ich bequem bin mit (wie ich NHibernate nicht verwendet ich über die Lernkurve sorgen würde und mögliche Probleme so dass ich eher so etwas wie LINQtoSQL oder maßgeschneiderte Datenzugriffsschicht verwenden ist) und Wrap es in einem eigenen Web-Service von WCF LOB Adapter .

Wenn Sie wirklich wollen nicht codieren, dass selbst Sie nur verwenden könnte ADO.NET Data Service die tut im Grunde, dass für das Entity Framework.

Es klingt wie Sie einige Indizes fehlen.

Oder müssen Sie Datenbank-Design zu OLAP-Modell verschieben.

Wenn das nicht der Fall ist.

  1. Mehr RAM.
  2. mehr CPU.
  3. Partitionieren der Tabellen.
  4. Erstellen Sie eine Wrapper direkt vor dem DB, die Asynchron-Anfragen verarbeiten kann. Es wird wie eine Schlange aus.
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top