0

私はここからかなり離れているかもしれませんし、この質問はおそらく主観的なものに近いかもしれませんが、とにかくここに行きます.

現在IList<T>、データベースからの情報をメモリにキャッシュするために使用しているためLINQ、それらから情報を照会するために使用できます。DBから必要な情報を簡単に照会するために、SOに関するいくつかの質問の助けを借りて作成したORM風のレイヤーがあります。例えば:

IList<Customer> customers = DB.GetDataTable("Select * FROM Customers").ToList<Customer>();

正常に動作しています。これらのリスト内の単一のアイテムに対して CRUD 更新を行う拡張メソッドもあります。

DB.Update<Customer>(customers(0));

再び非常にうまく機能しています。

今、私のアプリの GUI レイヤーで、具体的にDataGridViewはユーザーがデータを編集するためにバインドするときに、この DAL レイヤーをバイパスしTableAdapters、フォーム内で直接使用していることに気付きました。TableAdaptersまた、あちこちで使用しているという事実も発見しましたILists.1つに統合したいコード全体で異なる標準に従っています。

理想的には、これらのリストにバインドしてから、DAL にリストの「ダーティ」データを更新してもらいたいと考えています。私にとって、このプロセスには次のものが含まれます。

  1. 「汚れた」アイテムのリストをたどる
  2. これらのそれぞれについて、DB に PK を持つアイテムが既に存在するかどうかを確認します。
  3. (2) の場合は更新、そうでない場合は挿入
  4. 最後に、Delete FROM * WHERE ID NOT IN('all ids in list')クエリを実行します

これが でどのように処理されるかは完全にはわかりませんがTableAdapter、リスト内の項目が増えると、このメソッドのパフォーマンスが大幅かつ急速に低下することがわかります。

だから私の質問はこれです:

リストをデータベースにコミットする簡単な方法はありますか? 挿入/更新または削除の可能性があるため、commit という単語に注意してください。

に変換する必要がありDataTableますか?例えばここ

より高度なORMのいくつかはこの種のことを実行すると確信していますが、これを実行できるミニORM(dapper/Petapoco/Simple.dataなど)はありますか?シンプルに (現在の DAL と同じように) 柔軟に (必要なものが正確に得られるのであれば、SQL を記述してもかまいません) 維持したいと考えています。

4

1 に答える 1

1

現在、IList を使用してデータベースからの情報をメモリにキャッシュするため、LINQ を使用してそれらから情報を照会できます。

Linq には Linq-to-Datasets という部門もあるため、これはやむを得ない理由ではありません。

本当に欲しいもの/必要なものをより適切に決定します。

  • Entity Framework のような完全な ORM
  • DataDapter で DataSet を使用する
  • 基本的な ADO.NET (DataReader および List<>) を使用し、独自の変更追跡を実装します。

それらをある程度混ぜることができますが、あなたが指摘したように、1つを選ぶ方が良いです.

于 2012-10-10T13:58:29.503 に答える