Я роблю цю точну річ, але для цього вам потрібно зробити якусь генерацію коду.
У своє рішення я додав проект "EnumeratedTypes". Це консольний додаток, який отримує всі значення з бази даних і будує з них перерахунки. Потім це економить усі перераховані на зборах.
Код генерації переліку такий:
// 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");
Інші мої проекти в рішенні посилаються на цю створену збірку. Як результат, я можу потім використовувати динамічні перерахунки в коді в комплекті з intellisense.
Потім я додав подію після складання, так що після цього проекту "EnumeratedTypes" будується, він запускається сам і генерує файл "MyEnums.dll".
До речі, це допомагає змінити порядок збирання вашого проекту, щоб "EnumeratedTypes" будувався спочатку. В іншому випадку, як тільки ви почнете використовувати динамічно генерований .dll, ви не зможете зробити збірку, якщо .dll коли-небудь буде видалений. (Проблема з куркою та яйцем - ваші інші проекти у вирішенні потребують цього .dll, щоб правильно побудувати, і ви не можете створити .dll, поки не побудуєте рішення ...)
Я отримав більшість наведених вище кодів з цієї статті MSDN .
Сподіваюся, це допомагає!