向数据库添加新模型时出错无法插入重复键

时间:2018-02-05 06:17:45

标签: c# entity-framework primary-key

当我想向DB添加新模型时

Violation of PRIMARY KEY constraint 'PK_dbo.Factors'. Cannot insert duplicate key in object 'dbo.Factors'. The duplicate key value is (1001).
The statement has been terminated.

我的代码:

var factor = new Factor();
factor.UserId = UserId;
Db.Factors.Add(factor);
Db.SaveChanges();

模特地图:

enter image description here

在我的设计因素中必须启动whit 1000和我的代码:

protected override void Seed(BreDbContext context)
{
    context.Database.ExecuteSqlCommand("DBCC CHECKIDENT('Factors', RESEED, 1000);");          
}

2 个答案:

答案 0 :(得分:0)

我认为这是因为你插入了PRIMARY KEY字段中的值,这意味着PRIMARY KEY值必须是唯一值

例如,你有一个值为的表:

id name
1 john
2 serah
3 crish

但之后你插入一个新值:

3 victoria

在上面的情况下会抛出一个错误,因为在表中已经有一个id = 3的值(crish)// id字段是唯一的(PRIMARY KEY)

OR

在其他问题情况下,如果ur表与其他表有关系,如果你想在FOREIGN KEY Table中插入一个新值,你需要先在PRIMARY KEY Table中插入,因为FOREIGN KEY需要引用PRIMARY KEY值。 我希望我的回答可以帮助你

答案 1 :(得分:0)

我找到解决方案。

问题描述

在迁移种子

中的代码下运行时
context.Database.ExecuteSqlCommand("DBCC CHECKIDENT('Factors', RESEED, 1000);");

此代码按请求运行,此代码销毁数据库。 删除此代码并在代码

下面插入
protected override void Seed(BreDbContext context)
{
    //context.Database.ExecuteSqlCommand("DBCC CHECKIDENT('Factors', RESEED, 1000);");  
    for (int i = 0; i < 999; i++)
    {
        context.factors.add(new factor());
    }
    context.savechanges();
    var rang = context.factors.tolist();
    context.factors.removerange(rang);
    context.savechanges();  
}
创建数据库后,

在种子方法中注释所有代码。

最佳参考https://weblog.west-wind.com/posts/2013/Mar/26/Firing-an-Entity-Framework-Database-Initializer-from-within-DbContext