Генерируйте Перечисление от Значений, существующих в таблице с помощью платформы Объекта ADO.NET

Мое требование состоит в том, чтобы создать Перечисление на основе значений, существующих в таблице от DB. Я использую модель ADO.NET Entity Framework (.edmx файл), Может любой из Вас выручать меня.

9
задан abatishchev 10 May 2013 в 06:31
поделиться

1 ответ

Наверное, намного проще использовать шаблоны 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, которого еще нет, но он может вам понадобиться для удаления пробелов или недопустимых символов.

10
ответ дан 4 December 2019 в 12:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: