Schema 如何使用亚音速3.0动态获取表模式?
我有一个页面,它在下拉列表中列出了一堆表格。我需要动态加载数据库中的列列表。在亚音速2.0中,它可以由亚音速.Schema.BuildTableSchema完成,但不确定如何在3.0中完成。我尝试使用下面的代码,但不起作用Schema 如何使用亚音速3.0动态获取表模式?,schema,subsonic,subsonic3,Schema,Subsonic,Subsonic3,我有一个页面,它在下拉列表中列出了一堆表格。我需要动态加载数据库中的列列表。在亚音速2.0中,它可以由亚音速.Schema.BuildTableSchema完成,但不确定如何在3.0中完成。我尝试使用下面的代码,但不起作用 SubSonic.Schema.DatabaseTable D = new SubSonic.Schema.DatabaseTable("Users", SubSonic.DataProviders.ProviderFactory.GetProvide
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;
}
我认为没有人会回答这个问题,所以我使用以下sql查询艰难地完成了这项工作: 从信息_SCHEMA.columns中选择列_NAME,其中TABLE_NAME='TABLE_NAME'
从选择[id]中[id]所在的syscolumns中选择[name]来自sysobjects,其中[name]='Table_Name'和colid IN SELECT SIK.colid FROM sysindexkeys SIK JOIN sysobjects等SIK。[id]=SO。[id]其中SIK.indid=1和SO。[name]='Table_name'我不能100%确定亚音速的语法差异,但我知道在2.2中我能够做到:
Array arr = MyTable.Schema.Columns.ToArray();
在亚音速3.0中,您不需要这样做。模式在编译时由T4宏捕获,并在运行时可用。您可以在Structs.tt生成的代码中找到它 粗略地说,代码是
foreach (var column in UsersTable.Columns) {
// do stuff with column
}