Entity框架是否接受/添加未自动递增的int PK的数据?

时间:2015-12-15 08:50:12

标签: c# entity-framework

我有一个具有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();
                }
            }

2 个答案:

答案 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; }