.NET 2.0正式版的正式发布,对我们程序开发人员来说无疑是一件很大的喜事,已经很多的人开始了解并使用.NET 2.0。Visual Studio 2005 的一些新的增强功能和ADO.NET 2.0的新特性让我们开发高可伸缩的多层数据库应用程序更加简单和快捷。 本文将带领大家使用Visual Studio 2005来创建一个N层数据库应用的示例,并介绍一些NET 2.0和 Visual Studio 2005相关的知识。
在.NET 1.1下就可以使用强类型数据集,可是在Visual Studio 2003里开发起来还是有一些不方便,在Visual Studio 2005里对DataSet的设计视图做了很大的改进,因为ADO.NET 2.0增加了TableAdapter对象,所以现在也可以在DataSet设计视图里添加DataTable的表适配器。以前的typedDataSets只是一些数据实体(哑对象,只有属性的类)的集合,并不能很方便的自我治理持久化,以及数据完整性验证等。现在可以很方便的实现这些。
我们今天示范的这个例子是做一个显示消费者列表,并可以查看每个消费者订单细目的一个小程序。先用Visual Studio 2005创建一个typedDatasetSample.lib的类库项目,这个类库项目呢,我们主要保存一些强类型数据集,我们给这些强类型数据集加上一些自我持久的方法以及一些业务逻辑。然后呢我们就可以在构建桌面程序或者Web程序的时候使用它了,它就相当于我们的业务逻辑层,以后也许是通过Remoting来发布,也许通过Web服务发布,也许直接拷贝DLL来发布,一般把它放在application Server上,以方便你的前台Smart Client,asp.net,以及移动应用来实例并使用。
这是一个企业应用的核心,所以我们先构建它,然后就可以用Composite UI Application Block (CAB)来创建Smart Client界面,用ASP.net 2.0和微软的EnterPRiseLibrary November 2005 CTP创建Web应用界面和移动应用界面。Asp.net 2.0加入了WebPart,MastPage,ObjectDataSource这几个控件大大简化了创建Web界面应用的过程,大大提高了开发者的用户体验(个人感觉是这样的,使用起来非常的舒适)。Asp.Net 2.0的设备自适应功能,设备过滤器让开发者构建移动应用和构建普通Web应用统一了起来,写一段程序可能不用任何修改就即可以在Internet EXPlorer上显示,也可以在Inernet Explorer for Pocket PC上显示,也可以在Openwave WAP Emulator上显示,新的MultiView,View,Pager控件也对你快速开发移动应用提供了很大的帮助。我推荐大家尽量使用微软推荐的工具和技术来实现自己的企业应用,究竟微软还是更值得信赖的。
项目建好了,先删掉默认的Class1.cs,右键单击解决方案选择【Add】【New Item】添加一个名为Customer.xsd的数据集。Ctrl+Alt+S打开Server Explorer,右键单击【Data Connections】选择【Add Connection】,在打开的窗口里的【Server Name】输入框里输入“localhost/sqlexpress”,选中【Use Windows Authentication】单选框,在【Select or enter a database name】选择框里选择“Northwind”数据库,点击【Test Connection】,测试成功后单击【OK】按钮。这样我们就新建了一个数据连接。
partial class CustomersTableAdapter { public static Customer.OrderDetailsDataTable GetOrderDetails(string CustomerID) { typedDatasetSample.lib.CustomerTableAdapters.OrderDetailsTableAdapter o = new typedDatasetSample.lib.CustomerTableAdapters.OrderDetailsTableAdapter(); return o.GetOrderDetailsByCustomerID(CustomerID); } } 因为默认生成的业务实体类是CustomersRow,我们来改进它,给它加一个自定义方法。(但是我感觉CustomersRow这个名字不好听,假如做一个它的子类叫CustomersEntity的话,可是子类又不能引用父类,所以这个问题我也不知道如何解决,所以先用分割类来添加一个新方法,而不是继续CustomersRow类然后给子类添加一个新方法)
partial class Customer { partial class CustomersRow { public Customer.OrderDetailsDataTable GetOrderDetails() { return CustomersTableAdapter.GetOrderDetails(this.CustomerID); } } } 好了,这个类库就做到这里了,你当然可以添加其它一些业务逻辑,关闭这个项目。现在我们先创建一个typedDatasetSample.Web的网站。在解决方案里点击右键选择【Existing project】把刚才的数据集类库添加到网站解决方案里。然后在网站项目里右键选择【Add Reference】把typedDatasetSample.lib项目引用一下。
打开Default.aspx的设计视图,在ToolBox里拖放一个DetailView控件进来,重命名为CustomerDetailsView。点击右上角的小三角Choose Data Source,选择new data source,选择【object】就是添加一个ObjectDataSource,命名为CustomerObjectDataSource。点击【next】按钮后【choose your business object】里选择CustomersTableAdapter,下一步后选择CRUD操作的映射方法,前面我们说过一些方法加上[System.ComponentModel.DataObjectMethodAttribute(System.ComponentModel.DataObjectMethodType.Insert, false)]属性就会自动在这里绑定,所以我们直接在这里设置一下就行了。因为在系统自动生成了一些CRUD方法,我们不用它们,我们用我们的自定义查询和方法,比如说NewCustomer()方法,而不是默认的Insert()方法,因为这个不直观。然后把Enable Paging,Instering,Editing,Deleteing的勾打上。因为Customers表里数据太多,我们把ObjectDataSource的FilterExpression属性设置成“ContactTitle='Owner'”以减少检索的数据,其实CustomerObjectDataSource就相当于一个实际的数据源,它有好多模拟数据源的特性,大家可以具体看看。在asp.net 2.0里可以让你不知不觉就使用了MVC模式。
Asp.net的应用就开发完了,下面我们来开发一个桌面程序。关闭网站解决方案,创建一个typedDatasetSample.Win的windows应用程序,然后把typedDatasetSample.lib项目包含进去,并引用到typedDatasetSample.Win项目里。然后把一个DataGridView拖进来命名为customersDataGridView,并把Dock属性设置为fill,让它能填布满窗体。再拖一个BindSource进来命名为customersBindingSource,再拖一个CustomerTableAdapter进来并命名为ta,Visual Studio 2005支持几个简单从重构手段,其中包括重命名,所以你重命名控件名称的时候,它会自动帮你修改一些相关的代码,比较智能的。然后选择窗体,在事件窗格里双击Load事件,键入如下代码。