如何在Devexpress XPO上删除旧密钥后创建重复密钥

本文关键字:密钥 创建 删除 Devexpress XPO | 更新日期: 2023-09-27 18:28:47

这是我的产品类别:

  public class Product : XPLiteObject
    {
       public string productId {get;set;}
    }

我使用Gridview来控制数据。当我删除productId="id-5"的行时;

gridview1.deleteSelectedRows();

然后添加新行,其中productId="id-5";(删除了相同的id i)

我终于同意了;

unitOfWork1.CommitChanges();

收到异常:找到了一个重复的密钥!

如何在Devexpress XPO上删除旧密钥后创建重复密钥

看起来没有从数据库中删除相应的记录。有三个可能的原因:

  1. 如果GridView绑定到XPCollection,请确保XPCollection.DeleteObjectOnRemove属性设置为true。否则,GridView.DeleteSelectedRows方法仅从集合中删除对象;

  2. 如果GridView是通过UnitOfWork绑定到XPCollection的,那么在执行GridView.DeleteSelectedRows之后,还需要执行UnitOfWork.CommitChanges方法。否则,您的更改将不会提交到数据库;

  3. 如果Product类使用DeferredDeletionAttribute进行修饰,则删除此对象将设置相应的布尔列值,但实际上不会从数据库中删除记录。如果是这种情况,有四种方法可以解决问题:

    • 通过将DeferredDeletitionAttribute.Enabled属性设置为false,禁用此类的"延迟删除"功能;

    • 确保要添加的对象在键属性中始终具有唯一值;

    • 与其用已经使用的密钥创建新对象,不如恢复已删除的对象:如何恢复已删除对象(记录)

    • 您可以从数据库中物理删除标记为已删除的记录。为此,请使用Session.PurgeDeletedRecords方法。