我有一个具有int PK的表,我没有为它实现自动增量。我想从我的客户端应用程序添加数据。如果我尝试添加没有自动递增的int PK我得到这个例外:
EntityFramework.dll中出现'System.InvalidOperationException'类型的异常,但未在用户代码中处理
附加信息:属性“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();
}
}
答案 0 :(得分:0)
size
的构造不在循环之中。
第一次到达size.id = item.id;
行时,您的size
是一个新实体。您可以设置其属性,将其添加到anthill
,然后保存更改。
然后你再次经历循环。您再次进入size.id = item.id;
行。但是你还没有构建一个新的size
。你真的在那时修改现有的实体。
这正是异常告诉你的。将size
的构造移动到循环内。
答案 1 :(得分:-1)
如同 Prasad Kanaparthi
<
[Required, Key, DatabaseGenerated(DatabaseGeneratedOption.None)]
public int Id { get; set; }