DuplicateKeyException:无法添加具有已在使用的密钥的实体

时间:2014-08-04 08:03:29

标签: c# .net linq-to-sql

这是我在应用程序中使用的架构: enter image description here

我在数据库中已经存在用户时尝试插入帖子时收到DuplicateKeyException。我将帖子的用户设置为我从数据库中检索的实体,但是当我插入新帖子时,我得到了一个例外,说它的用户已经在使用。

这里是设置对现有用户实体的引用的代码:

private void setReferencedEntities(Post post)
{
    User user = (from u in dataContext.Users
                 where u.id == post.CommonColumn.User1.id
                 select u).FirstOrDefault();
    if (user != default(User))
    {
        post.CommonColumn.User1 = user;
    }
}

上面的函数调用如下:

foreach (Post post in newPosts)
{
    setReferencedEntities(post);
}
dataContext.Comments.InsertAllOnSubmit(newPosts);
dataContext.SubmitChanges();

编辑: 我还有这个问题,所以我想我会提供更多信息。 我有这个应用程序24/7在服务器上运行没有问题。当我从本地计算机上的数据库中删除所有内容并运行应用程序时,我没有任何问题。 当我从我的服务器数据库中复制所有数据并将其插入我的本地数据库时,会出现问题。尝试使用LINQ to SQL插入新Post时,我收到DuplicateKeyException。

此测试没有问题:

  1. 从本地数据库中删除所有内容
  2. 运行生成大约20个帖子的应用程序,大约200个 评论和回复
  3. 运行SQL脚本以删除一个帖子及其所有关联数据
  4. 再次运行应用程序以添加一个已删除的帖子及其全部内容 关联数据回数据库
  5. 此测试不起作用:

    1. 从本地数据库中删除所有内容
    2. 从服务器数据库中复制所有数据
    3. 运行SQL脚本以删除一个帖子及其所有关联数据
    4. 再次运行应用程序,将一个已删除的帖子及其所有相关数据添加回数据库 - >这失败了,带有DuplicateKeyException

1 个答案:

答案 0 :(得分:0)

尝试再次插入帖子,尝试在评论对象上设置帖子ID。