违反主键约束,无法在新空表中插入重复键



我知道这是一个常见问题,我已经在这里和其他地方读过它,但在大多数情况下,问题是数据库中已经存在一行(我正在检查......就我而言,它是一个带有空表的新数据库(嗯..除了Id = 0中有一行的发布者表),代码如下所示(实体框架 V5):

public void InsertPublisherResult(PublisherResult pResult)
{
    using (mydbEntities e = new mydbEntities())
    {
        if (e.Publishers.Any(c => c.Name == pResult._Publisher.Name))
            continue;
        e.Publishers.Add(scraperResult._Publisher);
        foreach (RelatedPublisher rp in pResult._RelatedPublishers)
        {
            e.RelatedPublishers.Add(rp);
        }
        foreach (Download d in pResult._Downloads)
        {
            e.Downloads.Add(d);
        }
        foreach (PublisherDomain pd in pResult._PublisherDomains)
        {
            e.PublisherDomains.Add(pd);
        }
        e.SaveChanges();
    }
}

其余的表(相关发布者,下载和发布者域)为空,因为它们在第一个pResult中没有提到的对象,主键 - Id是定义的实体键。

第一个pResult被跳过,因为它存在,第二个在 PK 冲突时引发异常。

可能是我试图在第一行插入第 2 pResultid=0出版商)? 如果不是,那我做错了什么?

感谢评论者问我Id是否自动递增,我检查了它并得到了答案:

该列没有自动递增,我不得不删除该列,或者在我的情况下,我删除了表并使用正确的 SQL 语句再次创建它:

CREATE TABLE [mydb].[dbo].[Publishers]
(
Id  Integer IDENTITY(1,1) primary key,
PublisherGuid uniqueidentifier,
Name nvarchar(100),
Link nvarchar(100)
);

之后,我从数据库更新了模型,它起作用了!这条评论为我节省了很多时间...

最新更新