【问题标题】:asp.net Dynamic Data Site with own MetaData具有自己的元数据的 asp.net 动态数据站点
【发布时间】:2010-04-20 18:21:53
【问题描述】:

我正在搜索有关在 asp.NET 动态站点中配置自己的 MetaData 的信息。

例如。我在 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。

系统表:

ID sysTableName TableName TableDescription

1 | someTable |Persons |关于系统中人员的所有数据

sysColumns:

ID TableName sysColumnName ColumnName ColumnDesc ColumnType MUnit

1 |一些表 | sometable_pname|姓名 |角色名称(例如约翰)| nvarchar(20) |空
2 |一些表 | sometable_Fullname|全名 |角色名称(例如 John Black)| nvarchar(50) |空
3 |一些表 | sometable_age|年龄 |人年龄|整数 |空

我希望在 Details/Edit/Insert/List/ListDetails 页面中用作 MetaData sysColumns 和 sysTableData。因为,例如。在 DetailsPage fullName 中,不如 Full Name 漂亮。

一些想法,有可能吗?

谢谢

更新:: 在列表页面中显示来自 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 表中获取数据?

【问题讨论】:

    标签: asp.net linq-to-sql dynamic-data asp.net-dynamic-data


    【解决方案1】:

    总之,是的,这是可能的。但是,我不认为这是一个好主意。您真正在谈论的是在您的数据库中存储演示数据,而实际上最好的放置位置是在您的 aspx 页面本身中。话虽这么说,如果您想在数据库中存储数据字典类型信息,我建议您使用内置于 MS SQL Server 中的内置 sys.tablessys.columnssys.types 视图,并添加一个名为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)
     );
    

    然后,您可以根据对象 ID 创建一个视图来检索表的元数据,然后直接绑定或动态填充您的 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
    

    编辑:

    然后,您可以在 ASP 代码中利用此视图,方法是编写一个包含有关单个表的元数据的类,并在 DAL 中编写一个方法来根据对象或表名检索此类的实例。当您填充页面时,页面可以检索您正在查找的记录以及表格的元数据,并将该元数据绑定到网格标题(在列表视图中)或单个标签的随附文本框录音模式。

    【讨论】:

    • 假设我同意您使用系统表并创建一个名为 ObjectDescriptions 的表。如何在 asp.net 动态数据站点中使用它?如果您查看 List.aspx,我们会遇到以下表达式:

      。如果他从我的元数据库中获取数据怎么办?
    • 您是在谈论编辑应用程序数据,并且只想使用元数据来显示有关如何编辑该数据的文本和说明,还是您在谈论编辑表格本身的元数据?我会根据您的回复更新主要答案。
    • 我正在讨论第一个版本。我只是想在asp.net动态数据应用程序中使用元数据来显示用于编辑、查看等的文本。
    【解决方案2】:

    我发现article 很有用,可以用来解决我的问题

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-04-09
      • 1970-01-01
      • 1970-01-01
      • 2011-06-19
      • 1970-01-01
      • 2014-01-25
      • 1970-01-01
      相关资源
      最近更新 更多