zoukankan      html  css  js  c++  java
  • 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();

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





    我是一个爱笑,认真记录每一天进步的博主. 转载请注明出处,商用请征得作者本人同意,谢谢!!!
  • 相关阅读:
    ES的基本用法
    Elasticsearch安装部署
    jquery-layer弹框在火狐浏览器中弹框不显示的问题
    MySQL中横表和竖表相互转换
    echarts--迁徙图特性简介
    Lucene入门案例一
    Lucene入门简介
    SpringMVC中的拦截器
    SpringMVC中Json数据格式转换
    SpringMVC中的文件上传
  • 原文地址:https://www.cnblogs.com/qy1234/p/5760021.html
Copyright © 2011-2022 走看看