我正在搜索有关在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 Ms表(我已创建),sysTables和sysColumns。
SYSTABLES:
1 | someTable |人员|系统中人员的所有数据
SYSCOLUMNS:
1 | someTable | sometable_pname |名称|角色名称(约翰)| nvarchar(20)|空
2 | someTable | sometable_Fullname |全名|角色名称(例如John Black)| nvarchar(50)|空
3 | someTable | sometable_age |年龄|人年龄| int | null
我希望在 Details / Edit / Insert / List / ListDetails 页面中使用MetaData sysColumns和sysTableData。因为,对于前。在详细信息页面 fullName 中,它不是美丽的 全名 。
someIdea,有可能吗?
谢谢
更新:
在列表页面中显示来自sysTables(metaData表)的数据我修改了<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 表中获取数据?
答案 0 :(得分:0)
总之,是的,这是可能的。但是,我不相信这是个好主意。你真正在谈论的是将演示数据存储在你的数据库中,当真正最好的地方放在你的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)
);
然后,您可以创建基于对象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中编写一个方法,以根据对象或表名检索此类的实例。当您填充页面时,页面可以检索您要查找的记录以及表的元数据,并将该元数据绑定到网格标题(在列表视图中)或单个标签的单个文本框中记录模式。
答案 1 :(得分:0)
我发现有用的article,可用于解决我的问题