Как получить схему таблицы динамически с помощью Subsonic 3.0? - PullRequest
0 голосов
/ 16 января 2010

У меня есть страница, и она содержит список таблиц в выпадающем списке. Мне нужно динамически загружать список столбцов в базе данных. В Subsonic 2.0 это могло быть сделано Subsonic.Schema.BuildTableSchema, но не уверен, как это сделать в 3.0. Я попытался с помощью кода ниже, но не работает ..

SubSonic.Schema.DatabaseTable D = new SubSonic.Schema.DatabaseTable("Users",    
        SubSonic.DataProviders.ProviderFactory.GetProvider("ApplicationConnectionString"));

    foreach (SubSonic.Schema.IColumn Column in D.Columns)
    {
      ListItem Item = new ListItem();

      if ((Column.Name ?? "").IndexOf("Email") != -1)
      {
        Item.Selected = true;
      }

      ddlEmailColumn.Items.Add(Item);
      ddlEmailColumn.SelectedValue = Column.Name;
    }

Ответы [ 3 ]

0 голосов
/ 28 января 2012

Я не уверен на 100% в разнице синтаксиса в SubSonic, но я знаю, что в 2.2 я могу сделать:

Array arr = MyTable.Schema.Columns.ToArray();
0 голосов
/ 04 февраля 2012

В SubSonic 3.0 вам не нужно этого делать. Схема записывается во время компиляции макросами T4 и доступна во время выполнения. Вы найдете это в коде, сгенерированном из Structs.tt.

В грубом приближении код

foreach (var column in UsersTable.Columns) {
    // do stuff with column
}
0 голосов
/ 26 января 2010

Я не думаю, что кто-нибудь ответит на это, поэтому я сделал это сложным образом, используя следующие SQL-запросы:

ВЫБЕРИТЕ COLUMN_NAME ИЗ INFORMATION_SCHEMA.columns WHERE TABLE_NAME = 'Table_Name'

ВЫБРАТЬ [имя] ИЗ системных столбцов, ГДЕ [идентификатор] ВХОД (ВЫБРАТЬ [идентификатор] ИЗ СИСТЕМНЫХ ОБЪЕКТОВ, ГДЕ [имя] = 'Имя_таблицы') И СОБЛЮДАТЬ ВХОД (ВЫБРАТЬ SIK.colid ОТ sysindexkeys SIK Присоединиться к системным объектам ТАК НА SIK. [Id] = SO. [Id] ГДЕ SIK.indid = 1 И ТАК. [Имя] = 'Table_Name')

...