Вероятно, гораздо проще использовать шаблоны T4. Вот действительно хорошая статья о начале работы
В моем примере ниже используется прямое соединение SQL, но, как вы можете видеть, вы можете включить любой код и сгенерировать любой вывод, который вам нравится, в файл cs, который компилируется в ваш проект. Вы можете заменить приведенный ниже синтаксис ADO перечислением коллекции объектов, полученных с помощью вашей модели Entituy Framework, и вывести соответственно.
Создайте файл с расширением .tt в каталоге, в котором вы хотите создать файл перечисления. Если вы назовете файл XXXXX.tt, то будет сгенерирован файл с именем XXXXX.cs, поэтому, назовите файл tt соответствующим образом.
Попробуйте что-нибудь в этом духе. Возможно, вам придется немного поэкспериментировать с синтаксисом и выводом, но я не собираюсь писать все это для вас, иначе вы ничего не узнаете:)
Просто имейте в виду, что этот вызов базы данных будет выполняться каждый раз, когда вы редактируете файл tt.
<#@ template language="C#" hostspecific="True" debug="True" #>
<#@ output extension="cs" #>
<#@ assembly name="System.Data" #>
<#@ import namespace="System.Data" #>
<#@ import namespace="System.Data.SqlClient" #>
<#
SqlConnection sqlConn = new SqlConnection(@"Data Source=XXXX;Initial Catalog=XXXX; Integrated Security=True");
sqlConn.Open();
#>
namespace AppropriateNamespace
{
public enum YourEnumName
{
<#
string sql = string.Format("SELECT Id, Name FROM YourTable ORDER BY Id");
SqlCommand sqlComm = new SqlCommand(sql, sqlConn);
IDataReader reader = sqlComm.ExecuteReader();
System.Text.StringBuilder sb = new System.Text.StringBuilder();
while (reader.Read())
{
sb.Append(FixName(reader["Name"].ToString()) + " = " + reader["Id"] + "," + Environment.NewLine + "\t\t");
}
reader.Close();
sqlComm.Dispose();
#>
<#= sb.ToString() #>
}
}
Попробуйте улучшить это. Вместо записи в StringBuilder выведите результаты каждого чтения. Read () непосредственно в вывод. Кроме того, я включил метод FixName, который еще не существует, но он может понадобиться для удаления пробелов или недопустимых символов.