DevExpress XPO笔记4:数据更新,删除功能的实现

XPO笔记2:XPO四大基类介绍 中我们了解了四大基类的区别,这里将以实例方式来演示乐观锁和删除功能。

一、建立实体类的表,基类选自XPObject,字段包含如下:

二、窗体中放个XPCollection和GridControl,并将GridControl的DataSource设置成新建的XPCollection (xpCustomer)

三、在窗体Load方法中初始化session1

session1.ConnectionString = ConnectionHelper.ConnectionString;

四、更新的操作

在更新和删除之前,需要先设置查询的对象,可以在“更新”按钮事件里加入查询方法,在改变属性的值后,需要调用Save方法保存到数据库。

        private void btnUpdate_Click(object sender, EventArgs e)
        {
            var c = session1.GetObjectByKey<Customer>(2);
            if (c != null)
            {
                c.Name = "更新的名称";
                c.Save();
            }
        }

数据库更改之前:

数据库更改之后:

这里的乐观锁OptimisticLockField相当于字段的版本标识,数据读取时将版本号一同读出,有数据更新时便将对应字段版本号加1,然后让传回的版本值标识与数据库存储的版本标识比较大小,如果大则更新数据库,否则不更新。

五、删除的操作

同样先查询出需要操作的持久化对象,然后直接调用对象的Delete()方法。也可以用session的Delete方法,让对象作为操作为传递。

        private void btnDel_Click(object sender, EventArgs e)
        {
            Customer c = session1.GetObjectByKey<Customer>(2);
            if (c != null)
            {
                c.Delete();
                //session1.Delete(c);方法2
            }
        }

数据库更改前:

数据库更改后:

可以看到数据仍然存在,只是非物理删除GCRecord(也就是软删除)的值改变了,它只是一个删除的状态标识,通过更改此标识来表示数据是否有效。当调用对象的Delete方法时,数据库中只更改了刻条目的GCRecord状态标识,如果需要实现物理删除,则需要调用PurgeDeletedObjects方法,此方法将删除数据库所有被标记GCRecord的数据。

        private void btnDel_Click(object sender, EventArgs e)
        {
            Customer c = session1.GetObjectByKey<Customer>(2);
            if (c != null)
            {
                c.Delete();
                //session1.Delete(c);方法2
                session1.PurgeDeletedObjects();
            }
        }

删除后数据库:

posted @ 2022-09-11 07:56  东经115  阅读(320)  评论(0编辑  收藏  举报