這個系列通過一些簡單例子循序漸進,介紹DevExpress ASP.NET控件的使用。先來介紹一下XPO的使用,安裝的DevExpress版本為DXperienceUniversal-12.2.4,使用Visual Studio 2012+Sql Server2005。
什么是XPO?
XPO 是 eXpress Persistent Objects的縮寫,它是DevExpress公司推出的一個運行在.NETFramwork平臺上的ORM工具。Persistent Objects翻譯過來時“持久化對象”的意思,所謂的持久化,也就是將數據存儲下來,比如存在數據庫、文件等這樣的形式“永久的”保存下來。XPO是一個ORM工具,它在應用程序代碼和數據庫之間扮演了一個中間層的角色,起到中間橋梁這樣一個作用,簡單而言,就是將面向對象編程所建立的對象在數據庫中做一個映射,使之和數據庫中的表建立一一對應的關系。我們在面向對象編程的時候,只需要關心程序中的“對象”就可以了,XPO會自動的把我們對對象的操作反應到數據庫中。
安裝過程在此略過。。。
安裝成功后,VS2012新建項目,就會有已安裝DevExpress類別選項,如下圖所示:
(圖一) 新建解決方案
(圖二)添加類庫項目
(圖三) 建立XPO的ORM模型向導
(圖四)選擇映射到現有數據庫
(圖五)選擇數據庫,輸入UserName,PassWord,此處勾選導和存儲過程,后續步驟將出現存儲過程選擇界面
(圖六) 確認選擇的表
(圖七)確認選擇的存儲過程
(圖八)數據庫表、字段前綴、后綴等設置
(圖九)完成
(圖十) 新建模型未保存界面
(圖十一)新建模型保存后,生成XXXCode目錄
(圖十二) 生成代碼目錄結構
自動生成的代碼:
ConnectionHelper.cs
using System;using DevExpress.Xpo;using DevExpress.Data.Filtering;namespace XPOModel.DemoDB{ public static class ConnectionHelper { public const string ConnectionString = @"XpoProvider=MSSqlServer;data source=.;user id=demo;password=demo;initial catalog=DemoDB;Persist Security Info=true"; public static void Connect(DevExpress.Xpo.DB.AutoCreateOption autoCreateOption) { XpoDefault.DataLayer = XpoDefault.GetDataLayer(ConnectionString, autoCreateOption); XpoDefault.session = null; } public static DevExpress.Xpo.DB.IDataStore GetConnectionProvider(DevExpress.Xpo.DB.AutoCreateOption autoCreateOption) { return XpoDefault.GetConnectionProvider(ConnectionString, autoCreateOption); } public static DevExpress.Xpo.DB.IDataStore GetConnectionProvider(DevExpress.Xpo.DB.AutoCreateOption autoCreateOption, out IDisposable[] objectsToDispoSEOnDisconnect) { return XpoDefault.GetConnectionProvider(ConnectionString, autoCreateOption, out objectsToDisposeOnDisconnect); } public static IDataLayer GetDataLayer(DevExpress.Xpo.DB.AutoCreateOption autoCreateOption) { return XpoDefault.GetDataLayer(ConnectionString, autoCreateOption); } }}
StoredProcHelper.cs
using System;using DevExpress.Xpo;using DevExpress.Data.Filtering;namespace XPOModel.DemoDB{ public static class SprocHelper { public static DevExpress.Xpo.DB.SelectedData ExecAspNetPager(Session session, int pageSize, int curPage, string viewName, string fieldName, string orderField, string orderType, string where1) { return session.ExecuteSproc("", new OperandValue(pageSize), new OperandValue(curPage), new OperandValue(viewName), new OperandValue(fieldName), new OperandValue(orderField), new OperandValue(orderType), new OperandValue(where1)); } public static DevExpress.Xpo.DB.SelectedData ExecSelectjqGridUsers(Session session, int PageIndex, string SortColumnName, string SortOrderBy, int NumberOfRows) { return session.ExecuteSproc("SelectjqGridUsers", new OperandValue(PageIndex), new OperandValue(SortColumnName), new OperandValue(SortOrderBy), new OperandValue(NumberOfRows)); } public static System.Collections.Generic.ICollection<SelectjqGridUsersResult> ExecSelectjqGridUsersIntoObjects(Session session, int PageIndex, string SortColumnName, string SortOrderBy, int NumberOfRows) { return session.GetObjectsFromSproc<SelectjqGridUsersResult>("SelectjqGridUsers", new OperandValue(PageIndex), new OperandValue(SortColumnName), new OperandValue(SortOrderBy), new OperandValue(NumberOfRows)); } public static XPDataView ExecSelectjqGridUsersIntoDataView(Session session, int PageIndex, string SortColumnName, string SortOrderBy, int NumberOfRows) { DevExpress.Xpo.DB.SelectedData sprocData = session.ExecuteSproc("SelectjqGridUsers", new OperandValue(PageIndex), new OperandValue(SortColumnName), new OperandValue(SortOrderBy), new OperandValue(NumberOfRows)); return new XPDataView(session.Dictionary, session.GetClassInfo(typeof(SelectjqGridUsersResult)), sprocData); } public static void ExecSelectjqGridUsersIntoDataView(XPDataView dataView, Session session, int PageIndex, string SortColumnName, string SortOrderBy, int NumberOfRows) { DevExpress.Xpo.DB.SelectedData sprocData = session.ExecuteSproc("SelectjqGridUsers", new OperandValue(PageIndex), new OperandValue(SortColumnName), new OperandValue(SortOrderBy), new OperandValue(NumberOfRows)); dataView.PopulateProperties(session.GetClassInfo(typeof(SelectjqGridUsersResult))); dataView.LoadData(sprocData); } }}
Users.cs
using System;using DevExpress.Xpo;using DevExpress.Data.Filtering;namespace XPOModel.DemoDB{ public partial class Users { public Users(Session session) : base(session) { } public override void AfterConstruction() { base.AfterConstruction(); } }}
Users.Designer.cs
using System;using DevExpress.Xpo;using DevExpress.Data.Filtering;namespace XPOModel.DemoDB{ public partial class Users : XPLiteObject { int fUserID; [Key(true)] public int UserID { get { return fUserID; } set { SetPropertyValue<int>("UserID", ref fUserID, value); } } string fUserName; [Size(50)] public string UserName { get { return fUserName; } set { SetPropertyValue<string>("UserName", ref fUserName, value); } } string fFirstName; [Size(50)] public string FirstName { get { return fFirstName; } set { SetPropertyValue<string>("FirstName", ref fFirstName, value); } } string fLastName; [Size(50)] public string LastName { get { return fLastName; } set { SetPropertyValue<string>("LastName", ref fLastName, value); } } string fMiddleName; [Size(50)] public string MiddleName { get { return fMiddleName; } set { SetPropertyValue<string>("MiddleName", ref fMiddleName, value); } } string fEmailID; [Size(50)] public string EmailID { get { return fEmailID; } set { SetPropertyValue<string>("EmailID", ref fEmailID, value); } } }}
至此,已經完成了從數據庫到XPO模型的創建,接下來開始使用XPO對象,看看它給我們帶來了什么?
下一節中,我們繼續使用XPO,結合XpoDataSource與ASPxGridView,以極少的代碼,完成單表CRUD操作。
-------------------------------------------------------------------------------------------------------
附示例數據庫的建庫腳本,使用SQL
新聞熱點
疑難解答