.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只是一些數據實體(啞對象,只有屬性的類)的集合,并不能很方便的自我治理持久化,以及數據完整性驗證等?,F在可以很方便的實現這些。
我們今天示范的這個例子是做一個顯示消費者列表,并可以查看每個消費者訂單細目的一個小程序。先用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); } } } 好了,這個類庫就做到這里了,你當然可以添加其它一些業務邏輯,關閉這個項目?,F在我們先創建一個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事件,鍵入如下代碼。