Estou fazendo exatamente isso, mas você precisa fazer algum tipo de geração de código para que isso funcione.
Em minha solução, adicionei um projeto "EnumeratedTypes". Este é um aplicativo de console que obtém todos os valores do banco de dados e constrói os enums a partir deles. Em seguida, ele salva todos os enums em uma montagem.
O código de geração de enum é assim:
// 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");
Meus outros projetos na solução fazem referência a esse assembly gerado. Como resultado, posso usar os enums dinâmicos no código, completos com intellisense.
Em seguida, adicionei um evento pós-compilação para que, após a construção deste projeto "EnumeratedTypes", ele execute a si mesmo e gere o arquivo "MyEnums.dll".
A propósito, ajuda a alterar a ordem de construção de seu projeto para que "EnumeratedTypes" seja construído primeiro. Caso contrário, depois de começar a usar seu .dll gerado dinamicamente, você não conseguirá fazer uma compilação se o .dll for excluído. (O tipo de problema do ovo e da galinha - seus outros projetos na solução precisam desse .dll para ser compilado corretamente, e você não pode criar o .dll até criar sua solução ...)
Peguei a maior parte do código acima neste artigo do msdn .
Espero que isto ajude!