Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 财产';PK';是对象的一部分';s键信息,无法修改。成功输入某些数据后发生错误_C#_Sql_Asp.net_Asp.net Mvc_Entity Framework - Fatal编程技术网

C# 财产';PK';是对象的一部分';s键信息,无法修改。成功输入某些数据后发生错误

C# 财产';PK';是对象的一部分';s键信息,无法修改。成功输入某些数据后发生错误,c#,sql,asp.net,asp.net-mvc,entity-framework,C#,Sql,Asp.net,Asp.net Mvc,Entity Framework,我已经用相关的错误检查了其他帖子,但在我的例子中它是不同的,因为它成功地允许了第一次迭代,并且发生在循环的第二次迭代中。我在MVC应用程序中使用数据库优先的方法。在以下代码中: ACOD a = new ACOD(); int cd = 1; foreach (var t in e) { a.S1 = t.S1; a.S2 = t.S2; a.S39 = t.S39; a.S40 = t.S40; if (db.ACODs.ToList().Count

我已经用相关的错误检查了其他帖子,但在我的例子中它是不同的,因为它成功地允许了第一次迭代,并且发生在循环的第二次迭代中。我在MVC应用程序中使用数据库优先的方法。在以下代码中:

ACOD a = new ACOD();
int cd = 1;
foreach (var t in e)
{
    a.S1 = t.S1;
    a.S2 = t.S2;
    a.S39 = t.S39;
    a.S40 = t.S40;

    if (db.ACODs.ToList().Count != 0)
    {
         var td = db.ACODs.Max(x => x.N100);
         cd = Convert.ToInt32(td) + 1;
    }
    a.N100 = cd;

    db.ACODs.Add(a);
    db.SaveChanges();
}
N100是我的主键。我在循环第二次迭代时得到上述错误。我已禁用N100的自动输入,因此我正在代码中生成PK。循环在N100=1的情况下成功运行,但在N100=2的第二次迭代中,上述错误发生在Add(a)方法调用上


我错在哪里?我使用相同的方法在类似的表中添加数据,但从未出现过此错误

问题似乎是您只创建了一个
ACOD
实例,并且重用了它。对于EF,在循环的第一次迭代之后,您不是在添加新实体,而是在修改现有实体


尝试将行
ACOD a=new ACOD()在循环中,这应该可以解决您的问题。

为什么需要修改PK?它不是自动递增的吗?@VsevolodGoloviznin不,它不是自动递增的。我在代码中递增它。我不是在修改PK。我只想添加新记录。你试过将对象创建放在循环中吗?非常感谢。这对我很管用。。所以问题是对象仍然指向前一个实例??是的,这就是EF的魔力。保存实例时,EF会在内部“保存”该实例,并将其绑定到当前上下文