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();
}
}
删除后数据库: