C# 财产';PK';是对象的一部分';s键信息,无法修改。成功输入某些数据后发生错误
我已经用相关的错误检查了其他帖子,但在我的例子中它是不同的,因为它成功地允许了第一次迭代,并且发生在循环的第二次迭代中。我在MVC应用程序中使用数据库优先的方法。在以下代码中: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
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会在内部“保存”该实例,并将其绑定到当前上下文