Maison >développement back-end >C++ >Comment les énumérations peuvent-elles être générées dynamiquement à partir d'une table de recherche de base de données ?

Comment les énumérations peuvent-elles être générées dynamiquement à partir d'une table de recherche de base de données ?

Barbara Streisand
Barbara Streisandoriginal
2025-01-12 06:50:42665parcourir

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

Générer dynamiquement des énumérations à partir de la table de recherche de base de données

Comment générer automatiquement des énumérations basées sur des valeurs stockées dans une table de recherche de base de données et garder les énumérations synchronisées avec la base de données sans modifier manuellement le code ? C'est une question courante.

Solutions de génération de code

Bien qu'elle ne puisse pas être entièrement automatisée, la génération de code peut apporter une solution. La génération automatique d'énumérations peut être réalisée en créant un projet distinct appelé « EnumeratedTypes » dans la solution. Ce projet agit comme une application console, récupérant les valeurs de la base de données, construisant des énumérations à partir de ces valeurs et les enregistrant dans un assembly séparé.

Dans ce projet de génération de code, utilisez le code suivant pour définir et remplir des énumérations dynamiques :

<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>

D'autres projets de la solution peuvent référencer cet assembly généré, accédant ainsi aux énumérations dynamiques et fournissant le support IntelliSense.

Automatisation des événements post-construction

Pour assurer la génération automatique des énumérations, le projet "EnumeratedTypes" peut ajouter un événement post-build. Cet événement s'exécutera pendant le processus de construction et générera le fichier "MyEnums.dll".

Autres notes

  • Modifiez l'ordre de construction pour vous assurer que le projet "EnumeratedTypes" est construit en premier afin d'éviter un échec de construction si "MyEnums.dll" est supprimé.
  • Référez-vous à l'article MSDN pour plus de détails sur la génération de code dynamique.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn