xpo-4大类

  Xpo (XPBaseObject、XPLiteObject、XPCustomObject、XPObject)

类名

延后删除

是否乐观锁定

提供OID字段

XPBaseObject

不支持

支持

不提供

XPLiteObject

不支持

不支持

不提供

XPCustomObject

支持

支持

不提供

XPObject

支持

支持

提供

 

普通类:就是一个简单的定义的类。

持久化类:可以把类的实例中的数据透时的保存到数据库中的类。

XPO是一种简单的对象映射技术,是一种把一个普通类变成持久化类的技术。也就是让一个普通的类和数据库中的一个表对应。把表中的字段和类中的字段对应,你可以透明的将一条记录直接保存到数据库,而不需要和ADO.net打交道。

XPBaseObject对象,他是XPO持久类中的基类,为其它的类提供了一个基本实现。当你的类继承XPBaseObject,你必须为你的类指定一个主键的字段。他不支持延后删除技术。

XPObject 这个应该是最常用的,他提供自已的OID字段,因而如果你的类继承于它,就不需要为提供主键。(最全的类了,支持延后删除,支持锁定)

XPLiteObject 基本和基类没什么区别 但是他不支持数据库并发中的锁定,和延后删除的技术。

XPCustomeObject 和基类一样,但是他支持并发数据库中的锁定,同时他也和基类要提供自定义主键的。他是支持延后删除技术)

什么叫延后删除:一个持久化类,他是和数据库中的一个记录对应的,当你执行一个删除一个持久化类的动作的时候,XPO不会马上就去在数据库   上执行真正的数据删除,而是将这条记录标记为删除,而且已经后不会在读取他。。当你要真正删除时,可以调用Session.PurgeDeletedObjects()来   完全删除这些标记的记录

A、XPBaseObject

1.建立实体类C继承XPBaseObject
public class C : XPBaseObject
{
public C()
{
//
//TODO: 在此处添加构造函数逻辑
//
}
[Persistent("id"),Key]
public string id;
[Persistent("name")]
public string name;
}

       在数据生成的字段如下:id,name,optimisticLockField;optimisticLockField 是乐观锁,值为true 或flase,

他的作用是防止其他用户试图同时更新对象,如果A在更新数据,B也在更新数据。

将执行保存的程序添加前添加:

DevExpress.Xpo.Session.DefaultSession.LockingOption =LockingOption.Optimistic;

将执行后添加:

DevExpress.Xpo.Session.DefaultSession.LockingOption=LockingOption.None;

然后看下延迟删除:

 if (this.ddlMain.SelectedIndex == -1)
{
return;
}
XPCollection<C> collection = new XPCollection<C>(new BinaryOperator("id", this.ddlMain.SelectedItem.Value, BinaryOperatorType.Equal));
C s = collection[0];
s.Delete();
}

ddlMain是下拉列表

运行 删除,数据库直接没有了这条数据。那么延后删除时什么意思呢?我们到支持延迟删除的类来看吧。

遇到错误:

1、Key Property for 'C' type is absent

解决:必须在继承的持久类中设置一个主键字段[persister("id"),key],如果你数据中对应的表没有设置,执行程序之后XPO会自动将你定义的字段设置成主键。

B、XPLiteObject

1、建立实体类C继承XPLiteObject

由于它各种不支持所以

在数据库的字段还是id,name

但是在官方文档中说可以手动启用乐观锁,不解啊..给字段设置为报错,给类设置怎么设呢?求解(更正:是在类上设置attribute 即:

[OptimisticLocking(true)]
            public class C : XPLiteObject)

从元数据:

using DevExpress.Xpo.Metadata;

namespace DevExpress.Xpo
{
//
// 摘要:
// Implements the DevExpress.Xpo.IXPObject.
[MemberDesignTimeVisibility(false)]
[NonPersistent]
[OptimisticLocking(false)]
public abstract class XPLiteObject : XPBaseObject
{
protected XPLiteObject();
protected XPLiteObject(Session session);
protected XPLiteObject(Session session, XPClassInfo classInfo);
}
}

C、XPCustomObject

仅仅不提供了OID

从元数据:

namespace DevExpress.Xpo
{
//
// 摘要:
// Implements the DevExpress.Xpo.IXPObject and provides a custom key definition.
[DeferredDeletion]
[MemberDesignTimeVisibility(false)]
[NonPersistent]
public abstract class XPCustomObject : XPBaseObject
{
protected XPCustomObject();
protected XPCustomObject(Session session);
protected XPCustomObject(Session session, XPClassInfo classInfo);
}
}
 
 

D、XPObject

全部支持

1、提供OID字段

它为持久类对应的那张表设置增加OID字段, 且这个OID字段为标识列, 其实就当于为我们创建了一个自增主键ID

2、延迟删除

延迟删除为在数据库增加字段GCRecord, 当我们删除在程序中删除一个字段的时候,其实它仅仅是在数据库的GCRecord字段记录一串数字,并标识它是已删除的

如果我们要真的删除,必须用:

DevExpress.Xpo.Session.DefaultSession.PurgeDeletedObjects();

清除已标记为删除对象的数据

上一篇:Matlab 进阶学习记录


下一篇:XAML中用一字符即可展示漂亮的图型