持久类
类数据能够被存储到某个地方,下次需要的时候,可以通过类的某个功能从某个地方读取。 也就是实体类,是一个被数据库中的字段抽象出来的类,对这个类的操作会直接影响到数据库中的数据
源文档 <http://baike.baidu.com/view/1026832.html?fromTaglist>
什么是XPO XPO是由大名鼎鼎的DevExpress提供的一种商业的ORM工具。 从概念上来说XPO是一种简单的对象映射技术,是一种把一个普通类变成持久化类的技术。也就是让一个普通的类和数据库中的一个表对应。把表中的字段和类中的字段对应,你可以透明的将一条记录直接保存到数据库,而不需要和ADO.net打交道。 下面是XPO中的类层次结构 这些类到底有啥作用呢? 这些类提供了将一个类的自身的数据保存到数据库中的所有功能。只要你继承其中一个类,你的类就马上变成了一个可以持久化的类了。也就是具有了将类自己的数据保存到数据库的能力。 看看顶层的XPBaseObject对象,他是XPO持久类中的基类,为其它的类提供了一个基本实现。当你的类继承XPBaseObject,你必须为你的类指定一个主键的字段。他不支持延后删除技术。 XPLiteObject 基本和基类没什么区别但是他不支持数据库并发中的锁定,和延后删除的技术。 XPCustomeObject和基类一样,但是他支持并发数据库中的锁定,同时他也和基类要提供自定义主键的。他是支持延后删除技术) XPObject这个应该是最常用的,他提供自已的OID字段,因而如果你的类继承于它,就不需要为提供主键。(最全的类了,支持延后删除,支持锁定) 什么叫延后删除:一个持久化类,他是和数据库中的一个记录对应的,当你执行一个删除一个持久化类的动作的时候,XPO不会马上就去在数据库上执行真正的数据删除,而是将这条记录标记为删除,而且已经后不会在读取他。。当你要真正删除时,可以调用Session.PurgeDeletedObjects()来完全删除这些标记的记录
类名 | 延后删除 | 数据锁定 | 提供OID字段 | XPBaseObject | 不支持 | 支持 | 不提供 | XPLiteObject | 不支持 | 不支持 | 不提供 | XPCustomObject | 支持 | 支持 | 不提供 | XPObject | 支持 | 支持 | 提供 |
源文档 <http://blog.csdn.net/hwhone/article/details/6683832>
1.连接oracle 引用DevExpress.Xpo.v10.2.Providers string connectionString= OracleConnectionProvider.GetConnectionString("TOPSITDB","topadmin", "topadmin"); IDataLayer dataLayer=XpoDefault.GetDataLayer(connectionString,AutoCreateOption.SchemaAlreadyExists); //XpoDefault.GetDataLayer(connectionString,AutoCreateOption.DatabaseAndSchema); XpoDefault.DataLayer =dataLayer; XpoDefault.Session.ConnectionString= connectionString;
2.在原有数据库执行操作(How to prevent XPO from making any changes to a legacydatabase) Yes, it's possible.It's enough to set the XpoDefault.Session.AutoCreateOptionproperty to None or to SchemaAlreadyExists to prevent XPO fromchanging the database schema. 设置AutoCreateOption.SchemaAlreadyExists(待测试) 源文档 <http://www.devexpress.com/Support/Center/kb/p/A2958.aspx>
3.XpoDataSource条件设置(XpoDataSource.Criteria Property) The following code snippet demonstrates two equivalentcriteria applied to the XpoDataSource1 and XpoDataSource2 data sourcecontrols. file:///C:\Users\jiaqi\AppData\Local\Temp\msohtmlclip1\01\clip_image001.gif | C# |
| XpoDataSource1.Criteria = "[Category] = 'Saloon' AND [Price] < 100000";
XpoDataSource2.Criteria = "[Category] = ? AND [Price] < ?";
XpoDataSource2.CriteriaParameters.Add("Category", "Saloon");
XpoDataSource2.CriteriaParameters.Add("Price", "100000"); |
The following criteria are identical because theyrefer to the same parameter values. file:///C:\Users\jiaqi\AppData\Local\Temp\msohtmlclip1\01\clip_image001.gif | C# |
| XpoDataSource2.Criteria = "[Category] = ? AND [Price] < ?";
XpoDataSource2.Criteria = "[Category] = ?Category AND [Price] < ?Price"; |
源文档 <http://documentation.devexpress.com/#XPO/DevExpressXpoXpoDataSource_Criteriatopic>
4.存在三种对应关系 一对一: public class Customer :XPObject { public Customer() { // Do not place any codehere. }
public Customer(Sessionsession) : base(session) { // Do not place any codehere. }
public Address Address;
public override voidAfterConstruction() { base.AfterConstruction(); // Initialize objectproperties here
Address = new Address(); } ... }
public CntrLocation CntrLocation { get { returnSession.GetObjectByKey<CntrLocation>(CntrId); }
} http://www.devexpress.com/Support/Center/p/Q144683.aspx
一对多: 每个消费者有多条收货地址。 "CustomerAddress"关系名称。 "Aggregated"级联操作(删除、更新)。 "Addresses"集合属性名。
public class Customer :XPObject { public string Name;
[Association("CustomerAddress",typeof(Address)), Aggregated] public XPCollectionAddresses { get { returnGetCollection("Addresses"); } } }
public class Address :XPObject { [Association("CustomerAddress")] public CustomerCustomer; }
例子:参考http://www.devexpress.com/Support/Center/e/E553.aspx
file:///C:\Users\jiaqi\AppData\Local\Temp\msohtmlclip1\01\clip_image002.png多对多: 每个消费者拥有多个类型,每个类型又包含消费者。 注意两个类中关系名相同。 public class Customer :XPObject { public string Name;
[Association("CustomerType",typeof(Type)), Aggregated] public XPCollectionTypes { get { returnGetCollection("Types"); } } }
public class Type :XPObject { [Association("CustomerType",typeof(Customer))] public XPCollectionCustomers { get { returnGetCollection("Customers"); } } }
源文档 <http://www.rainsts.net/article.asp?id=50>
5.每个持久类都需要一个指定为key的propery or field。XPObject和XPBaseObject的一个明显差别就是XPObject已有一个OId主键。 [Persistent("CreatedOn")] 强制映射字段 作用于aproperty or a field XPO一般只对持久类中的可写property和publicfield进行持久化操作。因此对只读的field可以加上该特性进行强制持久化。 参数:表名(可选),可参考 http://www.devexpress.com/Support/Center/kb/p/A1383.aspx 源文档 <http://blog.csdn.net/cdznet/article/details/359222>
|