ASP.NET 动态数据教程-基架

作者:vkvi 来源:ITPOW(原创) 日期:2009-4-5

基架

基架是一种机制,通过基架,我们不必再为每一个表的增加、查看、修改做不同的页面,因为基架会自动生成这些页面。

对所有表启用基架

注意,对所有表启用基架表示公开了整个数据模型。

同第一个示例中的,要对所有表启用基架,则在 Global.asax.cs 的 RegisterRoutes 方法中,添加:

model.RegisterContext(typeof(YourDataContextType), new ContextConfiguration() { ScaffoldAllTables = false });

YourDataContextType 为 *.dbml 中的继承自 System.Data.Linq.DataContext 的类的名称。如第一个示例中的 CfteaDataContext。

实际上这段代码有两个作用:一是注册数据上下文,二是启用基架。

对特定表启用基架(请注意后面的“重要说明”)

首先是注册数据上下文,但并不启用基架,如:

model.RegisterContext(typeof(CfteaDataContext), new ContextConfiguration() { ScaffoldAllTables = false });

然后在 Cftea.designer.cs 中找到要启用基架的表 [Table(Name="dbo.Products")],在它下面添加一行:

[System.ComponentModel.DataAnnotations.ScaffoldTable(true)]

运行效果:

ASP.NET 动态数据教程-基架

可以发现没有了 Categories 这个表,我们在浏览器中访问 /Categories/List.aspx,也会报 HTTP 404 错误。

对特定字段禁用基架(请注意后面的“重要说明”)

也就是不要让某个或某些字段显示出来。首先确保要处理的表已经启用基架,然后 Cftea.designer.cs 中找到该表的字段属性,对其设置如下属性:

[System.ComponentModel.DataAnnotations.ScaffoldColumn(false)]

重要说明

如果我们更改了 Cftea.designer.cs,就不能再在对象关系设计器中作任何更改了,否则 Cftea.designer.cs 文件的更改会丢失,因为对象关系设计器总是按自己的数据重新生成代码,而忽视我们添加或更改的某些部分。

解决办法是不改动 Cftea.designer.cs,而是在 Cftea.cs 上做文章,只是要麻烦些。如上,展开 Cftea.dbml,打开 Cftea.cs。如果不存在 Cftea.cs,则在 App_Code 下新建一个即可。

对特定表启用基架

[System.ComponentModel.DataAnnotations.ScaffoldTable(true)]
public partial class Products
{
}

对特定字段禁用基架(还要复杂些)

[System.ComponentModel.DataAnnotations.ScaffoldTable(true)]
[System.ComponentModel.DataAnnotations.MetadataType(typeof(ProductsMetadata))]
public partial class Products
{
}
 
public class ProductsMetadata
{
    [System.ComponentModel.DataAnnotations.ScaffoldColumn(false)]
    public object ProductName; // 类型使用 object
}

以上两段代码并没有什么逻辑内容,它仅是为了让属性([] 中的内容)生效。

相关文章