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();

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

xpo-4大类的更多相关文章

  1. Android布局6大类

    1:在我们Android开发中,常见的布局的方式有6大类 线性布局LinearLayout 相对布局RelativeLayout 表格布局TableLayout 单帧布局FrameLayout 绝对布 ...

  2. dll的加载方式主要分为两大类,显式和隐式链接

    之前简单写过如何创建lib和dll文件及简单的使用(http://blog.csdn.net/betabin/article/details/7239200).现在先再深入点写写dll的加载方式. d ...

  3. 今天工作中遇到的根据用户id取得产品大类和相关小类的问题

    今天做了一个项目,需求是客户登陆后,可以从会员中心发布详细信息(包括联系信息和公司信息),插入到数据库后在将来生成一个公司页面模板,一般的产品大类+小类 用repeater嵌套就可以了,但是这个涉及到 ...

  4. hook 9大类

    HOOK技术主要分为两大类,一是内核层HOOK,一是用户层HOOK. 用户层HOOK也就是在ring3环境下hook kenerl32.dll.User3.dll.Gui32.dll.Advapi.d ...

  5. 【Java知识点专项练习】之 数据类型两大类

    Java的数据类型分为两大类:基本类型和引用类型: 基本类型只能保存一些常量数据,引用类型除了可以保存数据,还能提供操作这些数据的功能: 为了操作基本类型的数据,java也对它们进行了封装, 得到八个 ...

  6. 关于fmri数据分析的两大类,四种方法

    关于fmri数据分析的两大类,四种方法: 数据驱动: tca:其实这种方法,主要是提取时间维的特征.如果用它来进行数据的分析,则必须要利用其他的数据方法,比如结合ICA. ica:作为pca的一般化实 ...

  7. 技术流:6大类37种方式教你在国内推广App

    转自:http://www.gamelook.com.cn/2015/01/201906 如何有效的推广自己App,是每个发行商都要考虑的问题,当然每个产品都有适合自己的推广方式.本文就集结了包括应用 ...

  8. Access Violation分成两大类:运行期和设计期(很全的解释)

    用Delphi开发程序时,我们可以把遇到的Access Violation分成两大类:运行期和设计期. 一.设计期的Access Violation 1.硬件原因  在启动或关闭Delphi IDE以 ...

  9. 一线大厂Java面试必问的2大类Tomcat调优

    一.前言 最近整理了 Tomcat 调优这块,基本上面试必问,于是就花了点时间去搜集一下 Tomcat 调优都调了些什么,先记录一下调优手段,更多详细的原理和实现以后用到时候再来补充记录,下面就来介绍 ...

  10. CSS的选择器分为两大类

    CSS的选择器分为两大类:基本选择题和扩展选择器. 基本选择器: 标签选择器:针对一类标签 ID选择器:针对某一个特定的标签使用 类选择器:针对你想要的所有标签使用 通用选择器(通配符):针对所有的标 ...

随机推荐

  1. linux监控流量脚本

    #!/bin/bashRx=`ifconfig eno16777736 | grep RX | grep packets | awk '{print $5}'`Tx=`ifconfig eno1677 ...

  2. Android -- onMeasure()源码分析

    1,作为自定义控件最重要的三个方法之一,onMeasure()可以说是我们研究的重点,今天我们更详细的来研究一下View的onMeasure()方法和ViewGroup的onMeasure()方法 2 ...

  3. as3中textField输入字符时,一次性过长后自动换行

    txt_show.text = showStr; var str:String = txt_show.text; var strlen:int = str.length; var len:int = ...

  4. 请不要把‘通知的观察者注册’放在-viewWillAppear:中

    接手项目二次开发的吐槽: 接手别人的代码的悲哀之一就是,我反复的把流程走了一遍又一遍,却始终无法发现原来是这个问题. 之前这个人把通知的观察者注册放在了-viewWillAppear:中,导致,我发送 ...

  5. shell脚本编写步骤及其常用命令和符号

    1,什么是Shell     Shell 是kernel的一个外壳,是一个命令解析器,负责用户与内核的交互.2,Shell脚本     Shell脚本类似于批处理,可以方便的执行大量命令.3,编写sh ...

  6. Hbuilder开发移动App(1)

    奇妙的前端,奇妙的js 众所周知,自从js有nodejs后,前端人员可以华丽的转身,去开发高并发非阻塞的服务端程序, 随着html5的出现,伴随一些amazing的特性,h5开发app的技术越发的成熟 ...

  7. 使用VsCode编写和调试.NET Core项目

    ​ 本来我还想介绍以下VSCode或者donet core,但是发现都是废话,没有必要,大家如果对这个不了解可以直接google这两个关键字,或者也根本不会看我这边文章. ​ 好直接进入主题了,本文的 ...

  8. yii2 advance安装

    转载自:http://www.genshuixue.com/i-cxy/p/7986531 1. 前提条件,php版本得> 5.4D:\phpStudy>php -v PHP 5.5.17 ...

  9. JQuery处理DOM元素-属性操作

    JQuery处理DOM元素-属性操作 //操作元素的属性: $('*').each(function(n){ this.id = this.tagName + n; }) //获取属性值: $('') ...

  10. JS里引用CSS属性时候的命名

        如果JS代码中设置<p>元素的另一个CSS属性font-family.这个属性的获取方式与color属性略有不同,因为 font和family之间的连字符与JS中减法操作符相同,J ...