Estoy haciendo exactamente esto, pero necesitas hacer algún tipo de generación de código para que esto funcione.
En mi solución, agregué un proyecto "EnumeratedTypes". Esta es una aplicación de consola que obtiene todos los valores de la base de datos y construye las enumeraciones a partir de ellos. Luego, guarda todas las enumeraciones en un ensamblado.
El código de generación de enumeración es así:
// Get the current application domain for the current thread
AppDomain currentDomain = AppDomain.CurrentDomain;
// Create a dynamic assembly in the current application domain,
// and allow it to be executed and saved to disk.
AssemblyName name = new AssemblyName("MyEnums");
AssemblyBuilder assemblyBuilder = currentDomain.DefineDynamicAssembly(name,
AssemblyBuilderAccess.RunAndSave);
// Define a dynamic module in "MyEnums" assembly.
// For a single-module assembly, the module has the same name as the assembly.
ModuleBuilder moduleBuilder = assemblyBuilder.DefineDynamicModule(name.Name,
name.Name + ".dll");
// Define a public enumeration with the name "MyEnum" and an underlying type of Integer.
EnumBuilder myEnum = moduleBuilder.DefineEnum("EnumeratedTypes.MyEnum",
TypeAttributes.Public, typeof(int));
// Get data from database
MyDataAdapter someAdapter = new MyDataAdapter();
MyDataSet.MyDataTable myData = myDataAdapter.GetMyData();
foreach (MyDataSet.MyDataRow row in myData.Rows)
{
myEnum.DefineLiteral(row.Name, row.Key);
}
// Create the enum
myEnum.CreateType();
// Finally, save the assembly
assemblyBuilder.Save(name.Name + ".dll");
Mis otros proyectos en la solución hacen referencia a este ensamblado generado. Como resultado, puedo usar las enumeraciones dinámicas en el código, completo con intellisense.
Luego, agregué un evento posterior a la compilación para que después de compilar este proyecto "EnumeratedTypes", se ejecute solo y genere el archivo "MyEnums.dll".
Por cierto, es útil cambiar el orden de construcción de su proyecto para que "EnumeratedTypes" se compile primero. De lo contrario, una vez que comience a usar su .dll generado dinámicamente, no podrá hacer una compilación si el .dll alguna vez se elimina. (Problema de la gallina y el huevo: sus otros proyectos en la solución necesitan este .dll para compilarse correctamente, y no puede crear el .dll hasta que cree su solución ...)
Obtuve la mayor parte del código anterior de Obtuve este artículo de msdn .
¡Espero que esto ayude!