這個系列通過一些簡單例子循序漸進(jìn),介紹DevExpress ASP.NET控件的使用。先來介紹一下XPO的使用,安裝的DevExpress版本為DXperienceUniversal-12.2.4,使用Visual Studio 2012+Sql Server2005。
什么是XPO?
XPO 是 eXpress Persistent Objects的縮寫,它是DevExpress公司推出的一個運行在.NETFramwork平臺上的ORM工具。Persistent Objects翻譯過來時“持久化對象”的意思,所謂的持久化,也就是將數(shù)據(jù)存儲下來,比如存在數(shù)據(jù)庫、文件等這樣的形式“永久的”保存下來。XPO是一個ORM工具,它在應(yīng)用程序代碼和數(shù)據(jù)庫之間扮演了一個中間層的角色,起到中間橋梁這樣一個作用,簡單而言,就是將面向?qū)ο缶幊趟⒌膶ο笤跀?shù)據(jù)庫中做一個映射,使之和數(shù)據(jù)庫中的表建立一一對應(yīng)的關(guān)系。我們在面向?qū)ο缶幊痰臅r候,只需要關(guān)心程序中的“對象”就可以了,XPO會自動的把我們對對象的操作反應(yīng)到數(shù)據(jù)庫中。
安裝過程在此略過。。。
安裝成功后,VS2012新建項目,就會有已安裝DevExpress類別選項,如下圖所示:
(圖一) 新建解決方案
(圖二)添加類庫項目
(圖三) 建立XPO的ORM模型向?qū)?/p>
(圖四)選擇映射到現(xiàn)有數(shù)據(jù)庫
(圖五)選擇數(shù)據(jù)庫,輸入UserName,PassWord,此處勾選導(dǎo)和存儲過程,后續(xù)步驟將出現(xiàn)存儲過程選擇界面
(圖六) 確認(rèn)選擇的表
(圖七)確認(rèn)選擇的存儲過程
(圖八)數(shù)據(jù)庫表、字段前綴、后綴等設(shè)置
(圖九)完成
(圖十) 新建模型未保存界面
(圖十一)新建模型保存后,生成XXXCode目錄
(圖十二) 生成代碼目錄結(jié)構(gòu)
自動生成的代碼:
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); } } }}
至此,已經(jīng)完成了從數(shù)據(jù)庫到XPO模型的創(chuàng)建,接下來開始使用XPO對象,看看它給我們帶來了什么?
下一節(jié)中,我們繼續(xù)使用XPO,結(jié)合XpoDataSource與ASPxGridView,以極少的代碼,完成單表CRUD操作。
-------------------------------------------------------------------------------------------------------
附示例數(shù)據(jù)庫的建庫腳本,使用SQL
新聞熱點
疑難解答