Мое требование состоит в том, чтобы создать Перечисление на основе значений, существующих в таблице от DB. Я использую модель ADO.NET Entity Framework (.edmx файл), Может любой из Вас выручать меня.
Наверное, намного проще использовать шаблоны 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, выводите результаты каждого reader.Read () непосредственно в вывод. Кроме того, я добавил метод FixName, которого еще нет, но он может вам понадобиться для удаления пробелов или недопустимых символов.