我有一个有int的表,并且我没有为它实现自动增量。我想从我的客户端应用程序中添加数据。如果我尝试添加而没有自动递增的int,则会得到以下异常:
“System.InvalidOperationException”类型的异常发生在EntityFramework.dll中,但未在用户代码中处理 附加信息:属性'id‘是对象密钥信息的一部分,不能修改。
内部例外:
属性'id‘是对象的密钥信息的一部分,不能修改。
我不会修改任何东西的。我只是想补充一句。到底怎么回事?
编辑
根据要求,这是我的代码
var size = new IMF_Size();
foreach (var item in sizeFromConsolidator)
{
if (anthill.IMF_Size.Where(w => w.Brand == item.Brand && w.Category == item.Category && w.SizeCode == item.SizeCode).Count() == 0)
{
size.id = item.id;
size.SizeCode = item.SizeCode;
size.Name = item.Name;
size.Brand = item.Brand;
size.Category = item.Category;
anthill.IMF_Size.Add(size);
anthill.SaveChanges();
}
}发布于 2015-12-15 11:53:06
size的构造在循环之外。
当您第一次进入size.id = item.id;行时,您的size是一个新实体。设置其属性,将其添加到anthill中,然后保存更改。
然后你再来一次循环。你又到了size.id = item.id;线。但是你还没有构建一个新的size。在这一点上,您确实在修改现有的实体。
这个例外也是这么告诉你的。将size的构造移到循环中。
发布于 2015-12-15 11:32:31
就像Prasad Kanaparthi说的那样,把这个放在类的优先性上给DB。
[Required, Key, DatabaseGenerated(DatabaseGeneratedOption.None)]
public int Id { get; set; }https://stackoverflow.com/questions/34284642
复制相似问题