xpo-4大类
Xpo (XPBaseObject、XPLiteObject、XPCustomObject、XPObject)
|
类名 |
延后删除 |
是否乐观锁定 |
提供OID字段 |
|
不支持 |
支持 |
不提供 |
|
|
不支持 |
不支持 |
不提供 |
|
|
支持 |
支持 |
不提供 |
|
|
支持 |
支持 |
提供
|
普通类:就是一个简单的定义的类。
持久化类:可以把类的实例中的数据透时的保存到数据库中的类。
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大类的更多相关文章
- Android布局6大类
1:在我们Android开发中,常见的布局的方式有6大类 线性布局LinearLayout 相对布局RelativeLayout 表格布局TableLayout 单帧布局FrameLayout 绝对布 ...
- dll的加载方式主要分为两大类,显式和隐式链接
之前简单写过如何创建lib和dll文件及简单的使用(http://blog.csdn.net/betabin/article/details/7239200).现在先再深入点写写dll的加载方式. d ...
- 今天工作中遇到的根据用户id取得产品大类和相关小类的问题
今天做了一个项目,需求是客户登陆后,可以从会员中心发布详细信息(包括联系信息和公司信息),插入到数据库后在将来生成一个公司页面模板,一般的产品大类+小类 用repeater嵌套就可以了,但是这个涉及到 ...
- hook 9大类
HOOK技术主要分为两大类,一是内核层HOOK,一是用户层HOOK. 用户层HOOK也就是在ring3环境下hook kenerl32.dll.User3.dll.Gui32.dll.Advapi.d ...
- 【Java知识点专项练习】之 数据类型两大类
Java的数据类型分为两大类:基本类型和引用类型: 基本类型只能保存一些常量数据,引用类型除了可以保存数据,还能提供操作这些数据的功能: 为了操作基本类型的数据,java也对它们进行了封装, 得到八个 ...
- 关于fmri数据分析的两大类,四种方法
关于fmri数据分析的两大类,四种方法: 数据驱动: tca:其实这种方法,主要是提取时间维的特征.如果用它来进行数据的分析,则必须要利用其他的数据方法,比如结合ICA. ica:作为pca的一般化实 ...
- 技术流:6大类37种方式教你在国内推广App
转自:http://www.gamelook.com.cn/2015/01/201906 如何有效的推广自己App,是每个发行商都要考虑的问题,当然每个产品都有适合自己的推广方式.本文就集结了包括应用 ...
- Access Violation分成两大类:运行期和设计期(很全的解释)
用Delphi开发程序时,我们可以把遇到的Access Violation分成两大类:运行期和设计期. 一.设计期的Access Violation 1.硬件原因 在启动或关闭Delphi IDE以 ...
- 一线大厂Java面试必问的2大类Tomcat调优
一.前言 最近整理了 Tomcat 调优这块,基本上面试必问,于是就花了点时间去搜集一下 Tomcat 调优都调了些什么,先记录一下调优手段,更多详细的原理和实现以后用到时候再来补充记录,下面就来介绍 ...
- CSS的选择器分为两大类
CSS的选择器分为两大类:基本选择题和扩展选择器. 基本选择器: 标签选择器:针对一类标签 ID选择器:针对某一个特定的标签使用 类选择器:针对你想要的所有标签使用 通用选择器(通配符):针对所有的标 ...
随机推荐
- Unity 3D Framework Designing(8)——使用ServiceLocator实现对象的注入
对象的 『注入』 是企业级软件开发经常听到的术语.如果你是一个 Java 程序员,一定对注入有着深刻的映像.不管是SSH框架还是SSM框架,Spring 全家桶永远是绕不过去的弯.通过依赖注入,可以有 ...
- 一张图解析nvm,npm,nodejs之间的关系
- python爬虫实战(二)--------千图网高清图
相关代码已经修改调试----2017-3-21 实现:千图网上高清图片的爬取 程序运行20小时,爬取大约162000张图片,一共49G,存入百度云.链接:http://pan.baidu.com/s/ ...
- 老李推荐:第3章3节《MonkeyRunner源码剖析》脚本编写示例: MonkeyImage API使用示例 1
老李推荐:第3章3节<MonkeyRunner源码剖析>脚本编写示例: MonkeyImage API使用示例 在上一节的第一个“增加日记”的示例中,我们并没有看到日记是否真的增加成功 ...
- 4.熟悉Java基本类库系列——Java 正则表达式类库
正则表达式语法结构图: Java正则表达式类库结构图: Java典型例子 1.String类 matches()方法 判断字符串是否符合特定正则表达式 @Test public void testRe ...
- ecshop SQL注入漏洞导致代码执行
漏洞名称:ecshop SQL注入漏洞导致代码执行补丁编号:11208761补丁文件:/includes/libinsert.php补丁来源:云盾自研漏洞描述:ecshop的/includes/lib ...
- word-wrap: break-word;与word-break: break-all;文本自动换行
word-break:break-all和word-wrap:break-word都是能使其容器如DIV的内容自动换行它们的区别就在于:1,word-break:break-all 例如div宽200 ...
- Myeclipse8.5开发-插件安装二:安装findbugs方法
环境:Myeclipse8.5 step 1:首先从官网下载findbugs插件:http://downloads.sourceforge.net/project/findbugs/findbugs% ...
- WPF 中使slide控件拖动完成后改变变量值
这个问题一开始觉得还是挺简单的,网上也看到不少解决方案. 首先一个最简单最直接的方案就是自定义一个名为FinalValue的依赖属性.随后重载OnThumbDragCompleted函数,在Thumb ...
- POJ 2411 状态压缩递,覆盖方案数
无非就是横着放与竖着放,状态中用1表示覆盖,0表示未覆盖. #include <iostream> #include <vector> #include <algorit ...