SubSonic 的强大功能得以释放





5.00/5 (1投票)
提供了一个通用页面演示数据库内容的示例。
引言
设想一下这样的场景——你的老板在你上网或编程(当然是你自己的酷项目,而不是你老板的)的时候闯入你的私人空间,然后说:“我们需要为(……)部门这个新数据库开发一个新的基于 Web 的内网应用程序。我们需要在 2 小时内完成……否则……”(他开始威胁你)。
本文或许能给你一个启发,展示一个酷炫的演示来证明你的网上冲浪和私人项目编程的合理性……或者说,更严肃地说,本文提供了一个演示,展示了 SubSonic 库的强大功能,它为数据库提供了简单高效的接口。
要求
本文面向具有 ASP.NET 技术基础知识的中高级 .NET Web 开发人员。如果你刚开始 C# ASP.NET 开发,可能会在理解(希望不会运行)此处描述的概念时遇到困难。你可能需要 Visual Studio 2005/2008 和 SQL Server 2005/2008;或者,如果你使用其他 C# 中心 ASP.NET 开发 IDE,你可能比我更了解你在做什么。如果你对 SubSonic 完全陌生,你可能想先看看 Michael Ceranski 的教程《使用 SubSonic 创建 DAL》,然后再回来。
背景
在 ORM 或正确分离的 DAL 出现之前,开发人员必须为从数据库获取的每种特定类型的数据请求编写 SQL 查询。
对象关系映射的最新进展为开发人员提供了一个额外的抽象层,在此之上构建软件可以更快、更不易出错,甚至更容易。本文旨在通过提供一个实际可用的演示来证明这一点。简单来说,在一个 ASPX 页面中,一个下拉列表会填充数据库中的表数量(此处使用 Northwind),通过更改数据库中的表名,我们可以看到该表的内容,并通过 SubSonic 专用控件提供的“下一页”和“上一页”按钮进行浏览,正如从图片中可以期望看到的那样。
使用代码
将源代码从链接下载到您选择的文件夹(我在示例中使用 D:\temp 文件夹)。它包含了所有需要的代码。打开 Visual Studio 并选择 Default.aspx 页面。按 F5 运行项目。按照页面上的说明进行操作。
阅读 NorthwindTableViewer.aspx 页面的代码隐藏中的注释。代码的每一行都有注释。我想不出更好的方法来解释代码的作用——请阅读注释,设置断点,并玩转这个演示。
运行代码后,请回到本文。如果你在没有运行代码的情况下阅读本文,你可能会错过整个内容,并且想要浪费时间……
网站项目的配置在 Web.config 中——所需的配置可以通过搜索“SubSonic”字符串简单地复制粘贴;你应该能理解数据库连接等的配置,并且知道如何为你的数据库进行更改;否则,显然前面提出的要求将无法满足。
对于 SubSonic 的特定配置,请开始研究 SubSonic 文档——这里不是复述文档的地方。
显然,对于任何数据库,都需要额外的安全性,所以在填充下拉列表或你选择的用于填充数据库中表集的任何控件时,都应该有一些逻辑。
通过用你自己的数据库替换 Northwind 数据库来练习(你可能会需要在更改 Web.Config 后删除 SubSonic.dll,然后再重新读取它)。你可能会遇到一些编译错误——这是糟糕数据库设计(缺少主键、外键等)的强烈信号。
它是如何实现的
SubSonic 库被用来为我们提供一个额外的抽象层。在这个演示中,利用了 SubSonic 提供的一些基本接口,以及项目中的两个自定义控件。SubSonic 的强大功能可以在重新配置此演示以使用其他数据库后得到体现——除了数据库名称及其在 Web.config 文件中的相应配置外,没有硬编码的内容。还利用了动态控件的概念。Yuriy Solodkyy 有一篇关于该主题的优秀文章——如果你对此感兴趣,应该在他所有的示例运行一遍,才能真正理解动态控件在 ASP.NET 中是如何工作的……我必须承认,目前我只是使用一个包含 System.Web.UI.Page
对象基本重写方法的模板类,并遵循文章中提出的规则。这两年来我一直遵循这些规则,每当出现问题时,总是我的错,没有遵循规则……所以,照镜子给了我一个线索,知道 bug 在哪里……
未来方向
这个演示想法可以根据以下操作进行开发
- 为该项目已配置的所有数据库创建一个下拉列表
- 添加其他 DBMS——Oracle、MySQL
- 显然,需要一些动态提供程序的检索;我在 StackOverFlow 网站上看到了一些问题。
- 如果有人对这种演示方式感到兴奋,也许创建一个开源项目是个好主意……
欢迎评论和反馈
如果您在代码中遇到任何错误,请告诉我。如果错误是由于我的环境“有些特殊”造成的,那么为了未来的读者,纠正这些错误是公平的。有一个小 bug,即网格控件的页大小没有始终正确设置;不过,我认为对于演示目的,应该可以原谅……任何找到此 bug 答案的人……我请他喝一杯啤酒(PayPal 是我的好朋友;)
- 投票——投票反映了您对文章内容的看法。
- 评论——研究表明,提供负面反馈的可能性是正面反馈的 5 倍,但即使您的反馈不是正面的,也请与我们分享原因。
- 协作——您是否有与本文主题相关的很棒的想法?联系我,或者与所有读者分享……
- 改进——您认为这个演示可以改进吗?如果您有现有的改进或更好的建议,请与我们分享。