这个系列通过一些简单例子循序渐进,介绍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

博文作者:挪威森林(Coding of life)

博文出处:http://www.cnblogs.com/allenlf/

主要研究:Web开发框架、ORM框架、WCF框架、医疗行业软件开发(HRP、EMR、CP、OA)

版权归挪威森林博客园所有,转载请注明出处,谢谢合作

DevExpress ASP.NET 使用经验谈(1)-XPO模型的创建的更多相关文章

  1. DevExpress ASP.NET 使用经验谈(9)-Dev控件客户端事件 ClientSideEvents

    上一节,已经介绍了ASPxGridView的自定义列和基本事件 ,本节接着将介绍Dev控件的客户端事件模型. 在上节示例基础上,我们增加一行菜单,使用Dev的ASPxMenu来实现,如下图所示. 图一 ...

  2. DevExpress ASP.NET 使用经验谈(7)-ASPxTreeList控件使用

    这一节,将介绍ASPxTreeList控件的使用,首先,我们增加一个标准地址库表AddressGB, 建表语句如下: CREATE TABLE [dbo].[AddressGB]( [Code] [v ...

  3. DevExpress ASP.NET 使用经验谈(3)-XPO对象的使用(使用指定数据连接)

    首先,我们贴出上一节Users类XPO对象的保存代码,直接建立的XPO Session会话,因为没有与我们所期望的数据层建立绑定, 所以程序自动创建了一个Access数据库,作为默认数据库操作对象来使 ...

  4. DevExpress ASP.NET 使用经验谈(2)-XPO对象的使用(使用默认数据连接)

    接下来,我们通过一个控制台应用程序,介绍XPO对象的保存操作. 图一 添加新项目 图二 选择项目类型为控制台应用程序 查看生成的Program.cs代码文件,代码如下: using System; u ...

  5. DevExpress ASP.NET 使用经验谈(5)-通过ASPxGridView实现CRUD操作

    这节,我们将通过使用DevExpress的ASPxGridView控件,实现对数据的CRUD操作. 首先,我们在解决方案中,添加一个网站: 图一 添加新网站 图二 添加DevExpress.Data. ...

  6. DevExpress ASP.NET 使用经验谈(8)-ASPxGridView自定义列和基本事件

    为演示本节示例,我们在原来Users表增加[性别Gender].[兴趣爱好Hobbies],[CreateTime创建时间],[ModifyTime]修改时间这4个字段, ALTER TABLE [d ...

  7. DevExpress ASP.NET 使用经验谈(4)-CriteriaOperator的使用

    上一节中,我们已经介绍了,使用CriteriaOperator表达式,获取对象数据. CriteriaOperator criteria = CriteriaOperator.Parse(" ...

  8. DevExpress ASP.NET 使用经验谈(6)-ASPxGridView属性设置与CRUD界面优化

    上一节中,我们通过简单的配置,通过ASPxGridView控件的使用,完成了对数据库表的CRUD操作. 这样的界面展现,功能是达到了,但是操作体验上,还是有所欠缺的. 图一 默认生成的列表界面 图二 ...

  9. DevExpress ASP.NET Core Controls 2019发展蓝图(No.6)

    本文主要为大家介绍DevExpress ASP.NET Core Controls 2019年的官方发展蓝图,更多精彩内容欢迎持续收藏关注哦~ [DevExpress ASP.NET Controls ...

随机推荐

  1. vs2013 MVC 无法确定要使用哪一版本的 ASP.NET Web Pages错误

    在web.config文件<configuration>节点下添加 <appSettings>     <add key="webPages:Version&q ...

  2. IE WebDriver 因保护模式无法启动的解决 (转载)

    现在Win7 已经应用很多了,即使是最原始的Win7 也是IE8,最新的patch后,都升到了IE11 Win7下预装高版本IE的情况下,启动IE WebDriver可能会出现: org.openqa ...

  3. VPN的分类方式

    VPN的分类方式    VPN的分类方式比较混乱.不同的生产厂家在销售它们的VPN产品时使用了不同的分类方式,它们主要是产品的角度来划分的.不同的ISP在开展VPN业务时也推出了不同的分类方式,他们主 ...

  4. openstack core components use 总结

    1,附加volume(块存储,云硬盘)到vmInstances(虚拟机实列)

  5. 新iPhone开售现场:土豪金火了

    今日苹果在全球范围内开始正式发售iPhone 5s与5c手机.在中国王府井苹果零售店,首位购机者李先生在今早4点50分便在此等候. 现场未发现黄牛 本次苹果在中国大陆的自有零售店渠道首批iPhone ...

  6. powerdesigner for sqlserver的一些实用配置

    在实用powerdesigner生成sqlserver 数据表时常常遇到一些问题: 1.数据中定义的字段名称相同生成物理模型时会报错. 2.数据各表之间的主键不能定义一样的名称. 我现在的需求是将数据 ...

  7. 高德地图API

    这周计划: 周一 早上 (高德地图API) 中午写(IFE PART ONE) 下午(高德地图API) 下班(IFE PART ONE)

  8. linux创建文件树,孩子兄弟树(或广义表),创建文件树及其訪问

    假设在Linux下要訪问一个目录. 我们须要知道一下系统调用. 1.opendir(path); //注意path是绝对路径 2.ptr=readdir(dir);//dir 为opendir();正 ...

  9. 更改DataTable列名方法

    1.通过DataAdapter将查询的结果填充到DataSet的表(DataTable)中: 如:dataAdapter.Fill(dataSet),这时dataSet的表名默认为Table 如果使用 ...

  10. IIS7中配置脚本错误解决方案

    同一个项目, 又建另一站点(相同的物理路径,) ,结果出下上图404.0错误, 原来是win7下应用程序池默认的32应用程序属性影响,参考下图,设置为True.        同一个项目, 又建另一站 ...