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

时间:2014-02-20 07:55:52

标签: c# sql-server entity-framework-5

我知道这是一个常见的问题,我已经阅读了here和其他地方,但在大多数情况下,问题是数据库中已存在一行(我正在检查...) 。在我的情况下,它是一个带有空表的新数据库(嗯..除了Id = 0中有一行的Publishers表),代码就像这样(实体框架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();
    }
}

其余表(RelatedPublishers,Downloads和PublisherDomains)为空,因为它们在第一个pResult中没有提到的对象,主键 - Id是定义的实体键。

第一个pResult被跳过,因为它存在,第二个会在PK违规时抛出异常。

可能是因为我试图在第一行(pResult发布商)中插入第二个id=0吗?如果没有,那么我做错了什么?

1 个答案:

答案 0 :(得分:2)

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

列没有自动递增和I had to drop the column或者在我的情况下我删除了表并使用正确的SQL语句再次创建它:

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

之后我从数据库更新了模型,它运行了!那个评论为我节省了很多时间......