Сайт динамических данных asp.net с собственными метаданными - PullRequest
0 голосов
/ 20 апреля 2010

Я ищу информацию о настройке собственных метаданных в asp.NET Dynamic Site.

Например. У меня есть таблица в MS Sql Server со структурой, показанной ниже:

CREATE TABLE [dbo].[someTable](
    [id] [int] NOT NULL,
    [pname] [nvarchar](20) NULL,
    [FullName] [nvarchar](50) NULL,
    [age] [int] NULL)

и у меня есть 2 Ms Sql таблицы (я создал), sysTables и sysColumns.

SYSTABLES:

ID sysTableName TableName TableDescription

1 | someTable | Персоны | Все данные о Персонах в системе

SYSCOLUMNS:

ID TableName sysColumnName ColumnName ColumnDesc ColumnType MUnit

1 | someTable | sometable_pname | Имя | Персона Имя (бывший Джон) | nvarchar (20) | нуль
2 | someTable | sometable_Fullname | Полное имя | Персона Имя (например, Джон Блэк) | nvarchar (50) | нуль
3 | someTable | sometable_age | возраст | Человек возраст | int | нуль

Я хочу, чтобы в Details / Edit / Insert / List / ListDetails страницы использовались как метаданные sysColumns и sysTableData. Потому что, например, в DetailsPage fullName , это не так, как Full Name .

someIdea, это возможно?

спасибо

Обновлен: : На странице списка для отображения данных из sysTables (таблица метаданных) я изменил <h2 class="DDSubHeader"><%= tableName%></h2>.

public string tableName;
protected void Page_Init(object sender, EventArgs e)
{

            table = DynamicDataRouteHandler.GetRequestMetaTable(Context);
            //added by me
            uqsikDataContext sd=new uqsikDataContext();
            tableName = sd.sysTables.Where(n => n.sysTableName == table.DisplayName).FirstOrDefault().TableName;
            //end

            GridView1.SetMetaTable(table, table.GetColumnValuesFromRoute(Context));
            GridDataSource.EntityTypeName = table.EntityType.AssemblyQualifiedName;
            if (table.EntityType != table.RootEntityType)
            {
                GridQueryExtender.Expressions.Add(new OfTypeExpression(table.EntityType));
            }
 }

Итак, что насчет sysColums? Как я могу получить данные из моей таблицы sysColumns ?

Ответы [ 2 ]

0 голосов
/ 22 мая 2010

Я нашел полезной статью , которую можно использовать для решения моей проблемы

0 голосов
/ 20 апреля 2010

Одним словом, да, это возможно. Однако я не верю, что это хорошая идея. То, о чем вы на самом деле говорите, - это сохранение данных презентации в вашей базе данных, когда действительно лучшее место для размещения это на самих страницах aspx. При этом, если вы хотите хранить информацию о типе словаря данных в вашей БД, я бы рекомендовал использовать встроенные представления sys.tables, sys.columns и sys.types, встроенные в MS SQL Server, и добавить таблица с именем ObjectDescriptions для хранения отображаемого имени и типа.

create table ObjectDescriptions (
   object_id int not null,
   column_id null, --leave this column null if the record describes the table itself
   ObjectDisplayName nvarchar(20),
   ObjectDescription nvarchar(200)
 );

Затем вы можете создать представление на основе идентификатора объекта для извлечения метаданных вашей таблицы и либо напрямую связать, либо динамически заполнить ваш asp.net FormView.

create view TableData as     
select 
     t.name as table_name
    ,td.ObjectDisplayName as table_display_name
    ,td.ObjectDescription as table_description
    ,c.name as column_name
    ,cd.ObjectDisplayName as column_display_name
    ,cd.ObjectDescription as column_description
    ,c.column_id
    ,ty.name as [type_name]
    ,c.max_length
    ,c.scale
    ,c.[precision]
from sys.tables t
    left join ObjectDescriptions td on td.object_id = t.object_id
    join sys.columns c on c.object_id = t.object_id
    left join ObjectDescriptions cd on cd.column_id = c.column_id and cd.object_id  = c.object_id
    join sys.types ty on c.user_type_id = ty.user_type_id

EDIT:

Затем вы можете использовать это представление в своем коде ASP, написав класс, содержащий ваши метаданные об одной таблице, и написав метод в вашем DAL для извлечения экземпляра этого класса на основе имени объекта или таблицы. Когда вы заполняете свою страницу, страница может извлечь как искомую запись, так и метаданные таблицы, и связать эти метаданные либо с заголовками сетки (в виде списка), либо с сопровождающими текстовыми полями отдельной метки в одном режим записи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...