Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在Devexpress XPO上删除旧密钥后,如何创建复制密钥?_C#_Winforms_Linq_Devexpress_Xpo - Fatal编程技术网

C# 在Devexpress XPO上删除旧密钥后,如何创建复制密钥?

C# 在Devexpress XPO上删除旧密钥后,如何创建复制密钥?,c#,winforms,linq,devexpress,xpo,C#,Winforms,Linq,Devexpress,Xpo,这是我的产品类别: public class Product : XPLiteObject { public string productId {get;set;} } 我使用Gridview来控制数据。 当我删除productId为“id-5”的行时 然后添加带有productId=“id-5”的新行;(与我删除的id相同) 最后我来了 unitOfWork1.CommitChanges(); 收到异常:找到了一个重复的密钥 似乎没有从数据库中删除相应的记

这是我的产品类别:

  public class Product : XPLiteObject
    {
       public string productId {get;set;}
    }
我使用Gridview来控制数据。 当我删除productId为“id-5”的行时

然后添加带有productId=“id-5”的新行;(与我删除的id相同)

最后我来了

unitOfWork1.CommitChanges();

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

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

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

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

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

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

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

    • 恢复已删除的对象,而不是使用已使用的密钥创建新对象:

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


  • 你好,天王星,请你看看这篇文章。类似于动态组合键的方式。
    unitOfWork1.CommitChanges();