这是我的产品类:
public class Product : XPLiteObject
{
public string productId {get;set;}
}
我使用Gridview来控制数据。 当我删除 productId =“id-5”;
的行时gridview1.deleteSelectedRows();
然后使用 productId =“id-5”添加新行; (同样的id我被删除了)
最后我说了;
unitOfWork1.CommitChanges();
收到异常:找到了一个重复的钥匙!
答案 0 :(得分:0)
看起来没有从数据库中删除相应的记录。有三个可能的原因:
如果GridView绑定到XPCollection,请确保XPCollection.DeleteObjectOnRemove属性设置为true。否则,GridView.DeleteSelectedRows方法仅从集合中删除对象;
如果GridView通过UnitOfWork绑定到XPCollection,则还需要在执行GridView.DeleteSelectedRows后执行UnitOfWork.CommitChanges方法。否则,您的更改将不会提交到数据库;
如果使用DeferredDeletionAttribute修饰Product类,则删除此对象将设置相应的布尔列值,但实际上不会从数据库中删除该记录。如果是这种情况,有四种方法可以解决问题:
通过将DeferredDeletionAttribute.Enabled属性设置为false来禁用此类中的延迟删除功能;
确保您要添加的对象在密钥属性中始终具有唯一值;
不是使用已使用的密钥创建新对象,而是还原已删除的对象:How to restore deleted objects (records)
您可以从数据库中物理删除被标记为已删除的记录。为此,请使用Session.PurgeDeletedRecords方法。