ASP.NET 2.0 BuildProvider 导论(一)

从这篇开始,开始陆续向大家介绍 ASP.NET 2.0 中一个新功能,在国内社区还很少有人论及,我就献丑了。

我第一次注意到这个新功能,是因为尝试使用 Visual Web Developer 2005 Express Edition 中的、新的 DataSet 设计器。这个 DataSet 设计器,和 Visual Studio .NET 2003 中的相比,有了很大的变化,最大的变化应该说是 TableAdapter。

新的 DataSet 设计器中,每个 DataTable 可以在它下方附带一个 TableAdapter。这个 TableAdapter 可以有若干个 Query。SELECT rows (获取一个 DataTable 的)类型的 Query 所返回的记录集,应该和它上方的 DataTable 定义的列相对应。其他类型的 Query,包括 SELECT scalar(只取第一行第一列的)以及 UPDATE, INSERT, DELETE 等,也可以被包含在这个 TableAdapter 中。

另外,TableAdapter 也可以单独存在(不依赖于 DataTable),不过如果是单独存在,那它就只能包含 SELECT scalar / UPDATE / INSERT / DELETE 等 Query,不能包含 SELECT rows 类型的 Query。

在这些 TableAdapters 或者说在新的 DataSet 设计器的帮助下,只要你愿意,你不需要再另外书写访问数据库(DAL)的代码(虽然有人会担心效率、耦合等等)。因为这些 TableAdapter 可以完成绝大多数常见的 DAL 操作。

接受了 TableAdapter 模式后,很多人(包括我)都会产生几个问题:TableAdapter 和 DataAdapter 有什么联系么?TableAdapter 是 .NET Framework 2.0 中新推出的一种类型?后一个问题,很容易就可以回答,因为 .NET Framework 2.0 SDK 的类库文档中,找不到任何叫做 TableAdapter 或者包含 TableAdapter 字样的类型。

很多细心人知道,在 Visual Studio .NET 2003 的 DataSet 设计器背后,每一个 *.xsd 文件背后都有一个 *.xsx 文件和一个 *.cs 文件(如果你用别的编程语言,扩展名可能不同)。前者只存储了设计器中每个图形的坐标和大小,它纯粹是为 DataSet 设计器服务的,可以在下次打开设计器时,恢复原来各个图形的位置。后者却包含了设计器中那些代表 DataTable 的图形所产生的代码。熟悉 VS.NET 2003 DataSet 的朋友,或许已经研究过这些冗长而枯燥的代码了。

可是在 Visual Web Developer 2005 Express Edition 的 DataSet 设计器背后,却只有一个 *.xss 文件,这个文件和 VS 2003 中的 *.xsx 文件一样,只记载了各个图形的坐标和大小。那些 *.cs 代码去哪儿了?

其实有一个简单的方法,可以查看到这些代码,那就是大家熟悉的“Go To Definition”菜单命令。

或许你已经熟悉了下面的事情:如果 DataSet 的文件名叫做 AbcDS.xsd,其中有一个 DataTable 叫 Users,则实际上:

1) DataSet 的类名就叫 AbcDS,
2) 那个 DataTable 就是 AbcDS.UsersDataTable;
3) 这个 DataTable 上附带的那个 TableAdapter 默认叫做 UsersDataTableAdapter,不过它处在一个叫做 AbcDSTableAdapters 的命名空间中,全名也就是 AbcDSTableAdapters.UsersDataTableAdapter。

任意找一个 *.cs 文件,我们输入 AbcDS,在智能感知的帮助下,我们可以看到 AbcDS.* 和 AbcDSTableAdapters.*。我们继续把类名书写完全后,右击,Go To Definition。看到这些代码了吧?

我在这个地方停一下,大家先琢磨琢磨那些自动产生的代码吧。这些代码都是 ASP.NET 2.0 中的内置的 DataSet BuildProvider 动态产生的。(待续...)

posted on 2006-08-07 10:58  破宝  阅读(146)  评论(0编辑  收藏  举报

导航