DevExpress ASP.NET 使用經驗談(1)-XPO模型的創建


這個系列通過一些簡單例子循序漸進,介紹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 Server2005 數據庫,SQL語句如下:

CREATE DATABASE [DemoDB] ON  PRIMARY 
( NAME = N'DemoDB', FILENAME = N'C:\DemoDB.mdf' , SIZE = 3072KB , FILEGROWTH = 1024KB )
 LOG ON 
( NAME = N'DemoDB_log', FILENAME = N'C:\DemoDB_log.ldf' , SIZE = 1024KB , FILEGROWTH = 10%)
GO
EXEC dbo.sp_dbcmptlevel @dbname=N'DemoDB', @new_cmptlevel=90
GO
IF (1 = FULLTEXTSERVICEPROPERTY('IsFullTextInstalled'))
begin
EXEC [DemoDB].[dbo].[sp_fulltext_database] @action = 'disable'
end
GO
ALTER DATABASE [DemoDB] SET ANSI_NULL_DEFAULT OFF 
GO
ALTER DATABASE [DemoDB] SET ANSI_NULLS OFF 
GO
ALTER DATABASE [DemoDB] SET ANSI_PADDING OFF 
GO
ALTER DATABASE [DemoDB] SET ANSI_WARNINGS OFF 
GO
ALTER DATABASE [DemoDB] SET ARITHABORT OFF 
GO
ALTER DATABASE [DemoDB] SET AUTO_CLOSE OFF 
GO
ALTER DATABASE [DemoDB] SET AUTO_CREATE_STATISTICS ON 
GO
ALTER DATABASE [DemoDB] SET AUTO_SHRINK OFF 
GO
ALTER DATABASE [DemoDB] SET AUTO_UPDATE_STATISTICS ON 
GO
ALTER DATABASE [DemoDB] SET CURSOR_CLOSE_ON_COMMIT OFF 
GO
ALTER DATABASE [DemoDB] SET CURSOR_DEFAULT  GLOBAL 
GO
ALTER DATABASE [DemoDB] SET CONCAT_NULL_YIELDS_NULL OFF 
GO
ALTER DATABASE [DemoDB] SET NUMERIC_ROUNDABORT OFF 
GO
ALTER DATABASE [DemoDB] SET QUOTED_IDENTIFIER OFF 
GO
ALTER DATABASE [DemoDB] SET RECURSIVE_TRIGGERS OFF 
GO
ALTER DATABASE [DemoDB] SET AUTO_UPDATE_STATISTICS_ASYNC OFF 
GO
ALTER DATABASE [DemoDB] SET DATE_CORRELATION_OPTIMIZATION OFF 
GO
ALTER DATABASE [DemoDB] SET PARAMETERIZATION SIMPLE 
GO
ALTER DATABASE [DemoDB] SET  READ_WRITE 
GO
ALTER DATABASE [DemoDB] SET RECOVERY FULL 
GO
ALTER DATABASE [DemoDB] SET  MULTI_USER 
GO
ALTER DATABASE [DemoDB] SET PAGE_VERIFY CHECKSUM  
GO
USE [DemoDB]
GO
IF NOT EXISTS (SELECT name FROM sys.filegroups WHERE is_default=1 AND name = N'PRIMARY') ALTER DATABASE [DemoDB] MODIFY FILEGROUP [PRIMARY] DEFAULT
GO


USE [DemoDB]
GO

/****** Object:  Table [dbo].[Users]    Script Date: 2014/11/27 13:36:56 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE TABLE [dbo].[Users](
	[UserID] [int] IDENTITY(1,1) NOT NULL,
	[UserName] [nvarchar](50) NULL,
	[FirstName] [nvarchar](50) NULL,
	[LastName] [nvarchar](50) NULL,
	[MiddleName] [nvarchar](50) NULL,
	[EmailID] [nvarchar](50) NULL,
 CONSTRAINT [PK_Users] PRIMARY KEY CLUSTERED 
(
	[UserID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]

GO

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM