ホームページ > バックエンド開発 > C++ > データベース ルックアップ テーブルから列挙型を動的に生成するにはどうすればよいですか?

データベース ルックアップ テーブルから列挙型を動的に生成するにはどうすればよいですか?

Barbara Streisand
リリース: 2025-01-12 06:50:42
オリジナル
665 人が閲覧しました

How Can Enums Be Dynamically Generated from a Database Lookup Table?

データベース検索テーブルから列挙を動的に生成します

コードを手動で変更せずに、データベース ルックアップ テーブルに格納されている値に基づいて列挙型を自動的に生成し、データベースと列挙型の同期を保つにはどうすればよいですか?これはよくある質問です。

コード生成ソリューション

完全に自動化することはできませんが、コード生成により解決策を提供できます。列挙型の自動生成は、ソリューション内に「EnumeratedTypes」と呼ばれる別のプロジェクトを作成することで実現できます。このプロジェクトはコンソール アプリケーションとして機能し、データベースから値を取得し、それらの値から列挙を構築し、それらを別のアセンブリに保存します。

このコード生成プロジェクトでは、次のコードを使用して動的列挙を定義し、値を設定します。

<code class="language-csharp">// 创建动态程序集
AssemblyName name = new AssemblyName("MyEnums");
AssemblyBuilder assemblyBuilder = currentDomain.DefineDynamicAssembly(name, AssemblyBuilderAccess.RunAndSave);

// 定义动态模块
ModuleBuilder moduleBuilder = assemblyBuilder.DefineDynamicModule(name.Name, name.Name + ".dll");

// 定义公共枚举
EnumBuilder myEnum = moduleBuilder.DefineEnum("EnumeratedTypes.MyEnum", TypeAttributes.Public, typeof(int));

// 从数据库检索数据
MyDataAdapter someAdapter = new MyDataAdapter();
MyDataSet.MyDataTable myData = myDataAdapter.GetMyData();

// 定义枚举文字
foreach (MyDataSet.MyDataRow row in myData.Rows)
{
    myEnum.DefineLiteral(row.Name, row.Key);
}

// 创建枚举并保存程序集
myEnum.CreateType();
assemblyBuilder.Save(name.Name + ".dll");</code>
ログイン後にコピー

ソリューション内の他のプロジェクトは、この生成されたアセンブリを参照できるため、動的な列挙にアクセスし、IntelliSense サポートを提供できます。

ビルド後のイベント自動化

列挙型の自動生成を確実にするために、「EnumeratedTypes」プロジェクトはビルド後のイベントを追加できます。このイベントはビルド プロセス中に実行され、「MyEnums.dll」ファイルが生成されます。

その他の注意事項

  • 「MyEnums.dll」が削除された場合にビルドが失敗するのを防ぐために、「EnumeratedTypes」プロジェクトが最初にビルドされるようにビルド順序を変更します。
  • 動的コード生成の詳細については、MSDN の記事を参照してください。

以上がデータベース ルックアップ テーブルから列挙型を動的に生成するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート