データベース検索テーブルから列挙を動的に生成します
コードを手動で変更せずに、データベース ルックアップ テーブルに格納されている値に基づいて列挙型を自動的に生成し、データベースと列挙型の同期を保つにはどうすればよいですか?これはよくある質問です。
コード生成ソリューション
完全に自動化することはできませんが、コード生成により解決策を提供できます。列挙型の自動生成は、ソリューション内に「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」ファイルが生成されます。
その他の注意事項
以上がデータベース ルックアップ テーブルから列挙型を動的に生成するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。