Sto facendo esattamente questa cosa, ma è necessario eseguire un qualche tipo di generazione di codice affinché funzioni.
Nella mia soluzione, ho aggiunto un progetto "EnumeratedTypes". Questa è un'applicazione console che ottiene tutti i valori dal database e da essi costruisce le enumerazioni. Quindi salva tutte le enumerazioni in un assembly.
Il codice di generazione di enum è così:
// 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");
Gli altri miei progetti nella soluzione fanno riferimento a questo assembly generato. Di conseguenza, posso quindi utilizzare le enumerazioni dinamiche nel codice, complete di intellisense.
Quindi, ho aggiunto un evento di post-compilazione in modo che dopo la creazione del progetto "EnumeratedTypes", venga eseguito da solo e generi il file "MyEnums.dll".
A proposito, aiuta a cambiare l' ordine di generazione del progetto in modo che "EnumeratedTypes" venga creato per primo. Altrimenti, una volta che inizi a utilizzare il tuo .dll generato dinamicamente, non sarai in grado di creare una build se il .dll viene mai eliminato. (Tipo di problema con pollo e uova: gli altri tuoi progetti nella soluzione hanno bisogno di questo .dll per essere compilato correttamente e non puoi creare il .dll finché non crei la tua soluzione ...)
Ho ottenuto la maggior parte del codice sopra da questo articolo di msdn .
Spero che questo ti aiuti!