【转】用XPO来做项目的ORM
所谓XPO,即eXpress Persistent Objects for .NET,Developer Express Inc. 的产品。这是个不错的数据持久层组件。据实验性能也不差,支持多种数据库,更重要的是不用用操心数据库的事情,它会自动帮你建立。这下可节省了40%的写代码时间!Object-Relational Mapping,大大提高了商业的重用性和灵活性,实现了面向对象的数据库编程。XPO在功能与Borland公司提出的ECO(Enterprise Core Object)模型非常类似,当然XPO的还没办法与ECO的强大所比拟,但是使用VS.NET环境编程的朋友们,如果没办法享受C# Builder(Delphi8.NET)所提供的ECO强大魅力的情况下,使用XPO是当前比较理想的选择,将编程人员的重复复杂的O/R映像关系工作中解放出来,将主要的心思应用到商业模型的实现当中。
一、数据库连接
如没有特别指定,XPO默认会自动生成一个MS Access数据库。可是这个mdb文件每次编译都会再新建一个,所以要真正用起来还是指定据据库连接吧。一般,在Global.asax中建立全局数据库连接。
[C#]
void Application_Start(object sender, EventArgs e)
{
DevExpress.Xpo.Session.DefaultSession.ConnectionString = String.Format("user id={ 0 };password={ 1 };initial catalog={ 2 };data source={ 3 };Connect Timeout={ 4 }", "sa", "", "database", "IP", 3000);
DevExpress.Xpo.Session.DefaultSession.Connect();
}
二、建实体
一个持久类(Persistent Class)一般来说映射为一个表类型,该表的每一条纪录即一个持久类的实例。持久类继承自XPObject或者XPBaseObject。
[C#]
public class Customer : XPObject
{
public string Name = "";
public string CompanyName = "";
public string Phone = "";
public string Fax = "";
}
XPObject继承自XPBaseObject,已包含Oid属性表示表的唯一自增量字段。而XPBaseObject需要手动去作一些映射工作,但提供更大的灵活性。XPBaseObject 实现了IXPObject接口,实际上假如我们自己去实现这个接口,也能自动保存到数据库, 也就是对象持久化了,比如窗体winform的状态就可以保存。
三、实例化使用
创建对象就创建了一条新纪录,调用基类的save就保存到库。
[C#]
Customer myCustomer = new Customer();
myCustomer.Name = "Mario Esprito";
myCustomer.CompanyName = "Infoltrix";
myCustomer.Phone = "(111) 345 6777";
myCustomer.Fax = "(222) 343 6744";
myCustomer.Save();
对象变量允许我们在程序当中进行引用,但是在程序程序运行过程中它并非是唯一存在的,因而需要在程序运行过程当中用一个唯一指示符标识出该对象来。在每一个持久性对象当中都有一个OID属性,OID标识某个指定类的唯一标识符:
[C#]
Customer myCustomer = (Customer)Session.DefaultSession.GetObjectByKey(typeof(Customer), storedOID);
三、表间关系
支持一对一,一对多,多对多三种关系。
数据库的表间关系在框架内体现为持久对象之间的关系。一般我们在设计一些类似关系的类时,我们用数组或者其他集合表示方法IList等等,来为类之间建立关系。XPO使用XPCollection来表示类之间的”对多关系”。并且附加属性来表示多对多还是一对多的关系。
四、检索
使用指定持久类类型的集合类XPCollection对象。这里并不意味着只能在一个表中查。如果这个持久类和其他类有关联关系的话,那么条件对象可以包含对关联类的属性条件。也就是实现了多表查询。
The following code example shows how to query the database for Customers having a BirthDate earlier than 01/02/1960:
[C#]
... new XPCollection(typeof(Customer),
new BinaryOperator("BirthDate", new DateTime(1960, 1, 2), BinaryOperatorType.Less))
复杂一点的条件使用GroupOperator。
To define more complex criteria such as ' BirthDate < 01/02/1960 AND Address.Street = ''10'th Avenue'' ', the GroupOperator must be used as shown below:
[C#]
GroupOperator criteria = new GroupOperator();
criteria.Operands.Add(new BinaryOperator("BirthDate", new DateTime(1960, 1, 2), BinaryOperatorType.Less));
criteria.Operands.Add(new BinaryOperator("Address.Street", "10'th Avenue"));
... new XPCollection(typeof(Customer), criteria)
五、继承和多态
六、事务
七、并发
八、数据分页机制
(未完待续)
一、数据库连接
如没有特别指定,XPO默认会自动生成一个MS Access数据库。可是这个mdb文件每次编译都会再新建一个,所以要真正用起来还是指定据据库连接吧。一般,在Global.asax中建立全局数据库连接。
[C#]
void Application_Start(object sender, EventArgs e)
{
DevExpress.Xpo.Session.DefaultSession.ConnectionString = String.Format("user id={ 0 };password={ 1 };initial catalog={ 2 };data source={ 3 };Connect Timeout={ 4 }", "sa", "", "database", "IP", 3000);
DevExpress.Xpo.Session.DefaultSession.Connect();
}
二、建实体
一个持久类(Persistent Class)一般来说映射为一个表类型,该表的每一条纪录即一个持久类的实例。持久类继承自XPObject或者XPBaseObject。
[C#]
public class Customer : XPObject
{
public string Name = "";
public string CompanyName = "";
public string Phone = "";
public string Fax = "";
}
XPObject继承自XPBaseObject,已包含Oid属性表示表的唯一自增量字段。而XPBaseObject需要手动去作一些映射工作,但提供更大的灵活性。XPBaseObject 实现了IXPObject接口,实际上假如我们自己去实现这个接口,也能自动保存到数据库, 也就是对象持久化了,比如窗体winform的状态就可以保存。
三、实例化使用
创建对象就创建了一条新纪录,调用基类的save就保存到库。
[C#]
Customer myCustomer = new Customer();
myCustomer.Name = "Mario Esprito";
myCustomer.CompanyName = "Infoltrix";
myCustomer.Phone = "(111) 345 6777";
myCustomer.Fax = "(222) 343 6744";
myCustomer.Save();
对象变量允许我们在程序当中进行引用,但是在程序程序运行过程中它并非是唯一存在的,因而需要在程序运行过程当中用一个唯一指示符标识出该对象来。在每一个持久性对象当中都有一个OID属性,OID标识某个指定类的唯一标识符:
[C#]
Customer myCustomer = (Customer)Session.DefaultSession.GetObjectByKey(typeof(Customer), storedOID);
三、表间关系
支持一对一,一对多,多对多三种关系。
数据库的表间关系在框架内体现为持久对象之间的关系。一般我们在设计一些类似关系的类时,我们用数组或者其他集合表示方法IList等等,来为类之间建立关系。XPO使用XPCollection来表示类之间的”对多关系”。并且附加属性来表示多对多还是一对多的关系。
四、检索
使用指定持久类类型的集合类XPCollection对象。这里并不意味着只能在一个表中查。如果这个持久类和其他类有关联关系的话,那么条件对象可以包含对关联类的属性条件。也就是实现了多表查询。
The following code example shows how to query the database for Customers having a BirthDate earlier than 01/02/1960:
[C#]
... new XPCollection(typeof(Customer),
new BinaryOperator("BirthDate", new DateTime(1960, 1, 2), BinaryOperatorType.Less))
复杂一点的条件使用GroupOperator。
To define more complex criteria such as ' BirthDate < 01/02/1960 AND Address.Street = ''10'th Avenue'' ', the GroupOperator must be used as shown below:
[C#]
GroupOperator criteria = new GroupOperator();
criteria.Operands.Add(new BinaryOperator("BirthDate", new DateTime(1960, 1, 2), BinaryOperatorType.Less));
criteria.Operands.Add(new BinaryOperator("Address.Street", "10'th Avenue"));
... new XPCollection(typeof(Customer), criteria)
五、继承和多态
六、事务
七、并发
八、数据分页机制
(未完待续)
浙公网安备 33010602011771号