我知道这是一个常见的问题,我已经阅读了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
吗?如果没有,那么我做错了什么?
答案 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)
);
之后我从数据库更新了模型,它运行了!那个评论为我节省了很多时间......