如何在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();
收到异常:找到了一个重复的密钥!
看起来没有从数据库中删除相应的记录。有三个可能的原因:
-
如果GridView绑定到XPCollection,请确保XPCollection.DeleteObjectOnRemove属性设置为true。否则,GridView.DeleteSelectedRows方法仅从集合中删除对象;
-
如果GridView是通过UnitOfWork绑定到XPCollection的,那么在执行GridView.DeleteSelectedRows之后,还需要执行UnitOfWork.CommitChanges方法。否则,您的更改将不会提交到数据库;
-
如果Product类使用DeferredDeletionAttribute进行修饰,则删除此对象将设置相应的布尔列值,但实际上不会从数据库中删除记录。如果是这种情况,有四种方法可以解决问题:
-
通过将DeferredDeletitionAttribute.Enabled属性设置为false,禁用此类的"延迟删除"功能;
-
确保要添加的对象在键属性中始终具有唯一值;
-
与其用已经使用的密钥创建新对象,不如恢复已删除的对象:如何恢复已删除对象(记录)
-
您可以从数据库中物理删除标记为已删除的记录。为此,请使用Session.PurgeDeletedRecords方法。
-