2

アプリケーション (C# - .NET 4.5) 内には、レポート生成ツールがあります。このツールは、SQL コマンドのみを受け取り、それを検証し、そこから、ORM ツールと同様に、SQL コマンドで指定された名前と対応するデータ型と同じ名前の使用可能なフィールドを含むまったく新しいレポートを作成する必要があります。

このツールの性質上、Reflection と Emit を使用してまったく新しいクラスを作成しています。dataReader ( System.Data.SqlClient.SqlDataReader) によって提供されるフィールドから、型を作成し、対応するデータを入力できます。

この結果は、レポートで使用できる IQueryable オブジェクトです。

このプロセス全体が完了し、テストされていますが、レポート、生成されたクラス、および SQL コマンドの両方を保持するには、この新しい型をデータベースに保存する必要があります。これは、データベースのレイアウトとシステム定義のため、XML を提供する必要があるためです。ファイルや文字列などを、圧縮して保存する前に Base64 文字列に変換するメソッドに変換します。

HEREに示されているように、レポートを DLL ファイルに保存するのは簡単な作業です。

しかし、この新しい型は XML に似た形式に変換する必要があるため、ここで少し迷ってしまいます。

私は過去に反対のことをしました。純粋な XML ファイルから型を手動で完全に作成しました。また、同様のことができることも知っていますが、XML ファイルを作成するには、クラスのすべての詳細/プロパティ/メソッド/メンバーなどにループする必要があります。

ここで私を助けることができる方法 (.NET フレームワークのヘルパーなど) はありますか?
100% 手動で行うのではなく、XML の生成/解析をツールに委任して、おそらくパフォーマンスも向上させたいと思います...

編集:

人々、コメントを投稿する前にタイトルを読んでください!タイプの XML を保存しようとしています。タイプ。オブジェクトではありません。タイプ。

@Mark Gravellヒントをありがとう。私はそれを確認します。しかし、スキーマについて:自動的に保存/ロードする方法はありますか?

4

1 に答える 1

2

を保存するには、スキーマを保存して実行時に互換性のある型を再作成する、AssemblyBuilderなどを使用してダイナミックアセンブリを保存可能として構成し、.dllとしてディスク(または他の場所)に書き込みます。 )。次に、実行時に.dllをロードし、タイプを見つけます。どちらのアプローチでも機能します。スキーマから型を作成するコードがすでにある場合は、最初の方が簡単な場合があります。

データを保存するための私の最初の本能はXmlSerializer、しかし、それはアセンブリ生成を介して機能するので、TypeBuilderからの完全に動的な型に対して機能するのは好きではないかもしれません。XmlSerializerが満足できない場合は、protobuf-netを試すことができます。これはメモリ内で機能するため(デフォルト)、かなり満足できるはずです。

でも!DataTableの使用を検討することもできます。DataTableはあまり好きではありませんが、まさにこのシナリオ向けに設計されています。

  • 実行時にのみ定義されるフィールドをモデル化できます
  • スキーマとデータの両方のシリアル化が組み込まれています
  • ランタイムモデルを宣言するためのComponentModelAPIを実装します
    • つまり、ほとんどのツールは無料で動作します
于 2012-06-20T18:48:03.830 に答える