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(); 

数据库

EF设计师

我以前碰到过这个。 此错误意味着您尝试将值明确分配给数据库自动分配的列。

建议:更新您的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; 并改变财产。