6

.NET DataSet を使用する正しい方法を見つけようとしています。データベース内のすべてのテーブルに対して DataTable を作成し、DataSet でリレーションシップを作成することになっていますか? DataSet でデータベース構造全体を再構築するのは、私にはクレイジーに思えます。

私のデータベースの簡単な例を使用します。CompanyEquipmentテーブルがあるとしましょう。各機器はコスト センターに属し、コスト センター データはテーブルに格納され、CostCenterテーブルに関連付けられCompanyEquipmentます。CompanyEquipment1 つのクエリですべての情報を返すために、既にCostCenterテーブルに結合されているデータを返すストアド プロシージャがあるとします。ストアド プロシージャを使用してデータを入力することもできますが、DataTableこの非正規化された結果テーブルをデータベースに保存するにはどうすればよいでしょうか。これが良い方法かどうかはわかりません。関連 (ブリッジ) テーブルを利用する多対多の関係を照会するには、複数の照会が必要になると思います。たとえば、EquipmentRoleさまざまな機器の使用状況を格納するテーブルがあり、EquipmentRoleAssignment複数のロールを機器に割り当てることができるテーブル。

または、データベースを模倣する DataTables がある場合は、各テーブルで DataAdapter.Fill() を使用して各テーブルを個別にクエリし、関連するデータをそれぞれに配置する必要がありますDataTable。したがって、次のようなものがselect * from CompanyEquipment where equipID = 1234あり、それをアダプタで使用して を埋め、CompanyEquipment DataTable次に別のクエリを使用して をselect * from CostCenter where costCenterID = <costcenterID from the companyequipment record>埋めなければなりませんCostCenter DataTable。このアプローチでは、データベースに 2 回アクセスする必要があり、結合を実行する DBMS の機能が失われます。

私はデータ駆動型アプリケーションに慣れていないので、ワークフローに慣れていません。特に、データの 1 つの表現を取得するためにデータベースにアクセスする必要がある回数。どんな助けでも大歓迎です。私はC#で働いています。

4

3 に答える 3

6

全くない?.NET 1.0 以降、DataSet を使用していません。ORMを使えばゲームオーバー。DataSet は、ユーザーがクエリを完全に動的にまとめることができるレポート アプリケーション以外では、実際にはまったく使用されません。そのような状況でも、ほとんどの場合、より優れたソリューションがあります。

于 2012-10-02T04:11:28.303 に答える
4

過去にデータセットを使用したことがありますが (かなり前のことですが)、これは私の経験に基づく私の 0.02 ドルです。

オプション 1 とオプション 2 の両方が、データセットの使用方法に関する有効なシナリオです。

取得シナリオの場合:- データの使用方法によって異なります。

たとえば、すべてのメイン テーブルと関連するテーブル データが、たとえばユーザーにすぐに表示されることがわかっているシナリオでは、おそらくオプション 1 が適しています。

ただし、メイン テーブル データを含むテーブルを表示し、行をクリックしたときにのみ関連するテーブル情報を表示するシナリオでは、要求どおりにデータを取得できるため、代わりにオプション 2 を使用することをお勧めします。 .

挿入/更新シナリオの場合

オプション 2 は、インメモリ構造がデータベースを模倣するようなシナリオで最適に機能します。したがって、アダプターまたは commandbuilder オブジェクトとデータ行の状態 (挿入済み/更新済み/削除済み) を使用して、適切なデータを簡単に挿入/更新/削除できます。オプション 1 を使用する場合は、ロジックを分割して別のテーブルに保存するロジックを自分で記述する必要があります。

これが役に立つことを願っています。ただし、ほとんどの実際のシナリオと同様に、実際には状況によって異なります

注:私はデータセット/データテーブルを完全に避けています。それらは非常に重いオブジェクトであり、リソースを少し浪費する傾向があるため、しばらくの間持っています。それらを使用する場合は、パフォーマンス要件に基づいてパフォーマンスをテストし、長期的に不適切にならないことを確認してください。

于 2012-10-02T04:12:47.513 に答える
0

EntityFrameworkでPOCOを使用することをお勧めします。EFを使用すると、既存のデータベースのPOCOクラス、派生DbContext、およびコードファーストマッピングを生成するEntity FrameworkPowerToolsを使用できます。そうすれば、自分でクラスを作成する手間が減ります。これで、質問で説明した問題に対処するためにEFで使用できるクラスができました。

于 2012-10-03T17:38:10.323 に答える