entity framework错误:无法在表中插入标识列的显式值
我在EF上遇到这个错误。
当IDENTITY_INSERT设置为OFF时,无法在表’GroupMembers_New’中为标识列插入显式值。
Db上的列是标识增量,在EF设计文件中, StoreGeneratedPattern
也是identity
。 好像EF每次尝试保存时都试图插入0。
一些建议说ID保留在表上或删除表并重新运行脚本。
有任何想法吗?
这是一些代码:
GroupMember groupMember = new GroupMember(); groupMember.GroupId = group.Id; groupMember.UserId = (new UserId(group.Owner)); //groupMember.Id = _groupContext.GroupMembers.Count(); group.GroupMembers.Add(groupMember); _groupContext.SaveChanges();
我以前碰到过这个。 此错误意味着您尝试将值明确分配给数据库自动分配的列。
建议:更新您的edmx文件以反映您在数据库中可能进行的任何更改。 如果数据库自动分配值,您应该在该属性下的设计器文件中看到“IsDbGenerated = true”属性。 如果它不存在,您可以手动添加它。
试试这个:
using System.ComponentModel.DataAnnotations.Schema; [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)] public decimal Identity_Col { get; set; }
Entity Framework类文件将这些代码行添加到Identity列。
将这些属性放在属性的顶部:
[Key] [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)] public int ID { get; set; }
谷歌的第一场比赛,所以在这里我的解决方案:
EF代码优先:由于autoinc PK’id’字段和guid列,设计如下:
[DatabaseGenerated(DatabaseGeneratedOption.Identity)] public Guid FileToken { get; set; }
有一个重复的身份。 我改成了:
[DatabaseGenerated(DatabaseGeneratedOption.Computed)] [DefaultValue("newid()")] public Guid FileToken { get; set; }
问题就消失了。
希望它能帮到你。
埃里克
在EF 6中,模型中的字段/列有一个属性:StoreGeneratedPattern。
在属性下拉列表中将其设置为“Identity”。
(我不知道EF 4.上面的答案,使用IsDbGenerated,似乎适用于EF 4.)
这在底层XML中对应于元素的属性:
– 但您不需要手动处理XML,因为您可以使用设计器。
如何弄乱这一点并不清楚。 从数据库中刷新模型后,我遇到了问题。 如果您在生成模型后在表上设置PK或更改其名称,可能会感到困惑。 (我使用的是表/数据库优先方法,而不是代码优先。)
您不能使用上述方法将C#属性放在实体代码上,因为在这种情况下,实体代码由EF生成。 EF应该理解(“自己”)该字段是一个身份。
我在我的应用中遇到了这个问题; 并修复它将id字段的属性“StoredGeneratedPattern”更改为Identity。
所以,转到模型; 抬头看桌子; 点击主要关键字的propierties; 并改变财产。