我知道这是一个常见问题,我已经在这里和其他地方读过它,但在大多数情况下,问题是数据库中已经存在一行(我正在检查......就我而言,它是一个带有空表的新数据库(嗯..除了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 pResult
(id=0
出版商)? 如果不是,那我做错了什么?
感谢评论者问我Id
是否自动递增,我检查了它并得到了答案:
该列没有自动递增,我不得不删除该列,或者在我的情况下,我删除了表并使用正确的 SQL 语句再次创建它:
CREATE TABLE [mydb].[dbo].[Publishers]
(
Id Integer IDENTITY(1,1) primary key,
PublisherGuid uniqueidentifier,
Name nvarchar(100),
Link nvarchar(100)
);
之后,我从数据库更新了模型,它起作用了!这条评论为我节省了很多时间...