5

.Net O/R (オブジェクト/リレーショナル) マッパーはすぐに非同期メソッドを提供しますか?

できれば非同期メソッドのボイラープレートを書きたくない

CCR フレームワークを使用して、非同期メソッドで独自の DAL を作成しました。CCR は基本的に、IO 応答を待っているスレッドをブロックしないことを要求します。

これまでのところ、私のソリューションの良い点は、それが最小限に抑えられていることです。しかし、このプロジェクトが規模と機能の面で成長するにつれて、生の SQL クエリとボイラー プレート コードを維持するという、やや困難なタスクに直面しています。

しかし、一方で、O/R マッパーの非同期メソッドが実際には複雑さの奇妙さを追加する厄介なハックである場合、私は良くありません。

非同期プログラミングに代わるものに注目しないでください。

4

6 に答える 6

2

私はあなたがそれを間違えたと思います。私の理解では、あなたの場合の非同期実行は、ORM レベルではなくアーキテクチャ レベル、つまりメッセージ キュー駆動型アーキテクチャで処理する必要があります。私が見ているのは、あなたのウェブサービスはメッセージをキューに入れるだけであり、ある種のバックグラウンドエージェントがキューから非同期処理を行うということです.

コメントするには十分な評判がなく、Stackoverflow が別の「回答」を挿入することを警告しているため、ここにコメントを残します。

Lee B: SQLAlchemy? .NET でどのように使用しますか???

于 2009-03-04T11:57:58.983 に答える
2

はい、SQLAlchemy (最高の ORM の 1 つ) には sAsync があります。

http://foss.eepents.com/sAsync

および NADBAPI:

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

于 2009-03-03T12:09:15.000 に答える
1

非同期でのデータのフェッチは、さまざまな方法で実行できます。o/r マッパーにアウトソーシングすると、実際にはコードの複雑さが軽減されないため、おそらく対処したくない課題が生じます。主な問題は、フェッチが o/r マッパーによって完了したときに通知されるメカニズムが必要であるため、データの準備ができていることが呼び出し元に通知されることです。

これは、自分でスレッドを作成し、そのスレッドから o/r マッパーのフェッチ ロジックを呼び出すよりも複雑ではありません。

レスポンシブな Web サービスを作成したいと述べた場合、呼び出し元が Web サービスの外部にあり、データを待機していることを認識する必要があります。Iow: 呼び出し元がデータのフェッチに Web サービスを使用する場合、他のクライアントも Web サービスを呼び出すことができるため、既に非同期です。元の呼び出し元の要求は別のスレッドで処理され、データをフェッチするロジックはその中で実行されます。その後、データが呼び出し元に返されます。

非同期メソッドの使用はここでは役に立ちません。そうしないと、データの準備ができたときに呼び出し元に通知する必要があり、Web サービスからクライアントへのプッシュが必要になり、フェッチが行われる限りクライアントが Web サービスに接続したままにしておく必要があるためです。とにかくかかります。

非同期のデータベース インタラクションは、何かにスローできる魔法のようなものではないため、応答性が向上します。非同期データベースの相互作用により、その間に呼び出し元が他のことを行う可能性があります。ただし、それがまだ必要でない場合は、最初から非同期データベースとのやり取りは必要ありません。これにより、コードがはるかに複雑になります。

于 2009-03-04T11:52:07.187 に答える
1

それらのいずれかがすぐに使用できるかどうかはわかりませんが、テンプレートベースの.NetTiersを使用できます。非同期部分をテンプレートに追加するだけです。これにより、定型コードと生の SQL クエリを維持する必要が少なくともなくなります。このブログでは、非同期呼び出しを MS Enterprise ライブラリ (必要に応じて .NetTiers で使用できます) に追加する方法を示します。

2008 年 12 月中旬の時点で、LLBLGen Pro は非同期呼び出しをネイティブにサポートしていません。現在、ゲノムもそうではありません。Telerikもそうではないようです。ほとんどの場合、ドキュメントを検索して、 async または begin で始まるメソッドを探しました。これがパターンであるためです。

それが良い考えかどうかについては、他の回答に任せます...

于 2009-03-05T22:43:47.910 に答える
0

Nhibernateは、LinqToSQL よりも Async を実装するのが比較的簡単なようです。これを見る

個人的には、私が快適に使用できるものを使用することです (NHibernate を使用したことがないため、学習曲線と潜在的な問題について心配するので、LINQtoSQL や特注のデータ アクセス レイヤーなどを使用することをお勧めします)。WCF LOB Adapterの独自の Web サービス。

自分でコーディングしたくない場合は、Entity Framework に対して基本的にそれを行うADO.NET Data Servicesを使用できます。

于 2009-03-03T12:05:00.847 に答える