实体框架错误:无法在表中插入标识列的显式值

问题描述:

我在EF上收到此错误。实体框架错误:无法在表中插入标识列的显式值

Cannot insert explicit value for identity column in table 'GroupMembers_New' when IDENTITY_INSERT is set to OFF.

在分贝列标识增量并在EF的设计文件,StoreGeneratedPatternidentity为好。似乎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(); 

database

EF Designer

我以前也遇到了这个。此错误意味着您正尝试将值显式指定给数据库自动分配的列。

建议: 更新您的edmx文件以反映您可能在数据库中所做的任何更改。 如果数据库自动分配值,则应在该属性下的设计器文件中看到“IsDbGenerated = true”属性。如果它不在那里,你可以手动添加它。

+2

事实上,更新edmx是解决方案。在ef5中谢谢 –

+2

在edmx设计器中有一个名为'StoreGeneratedPatern'的字段的属性 - 将其设置为'Identity' – timothy

试试这个:

using System.ComponentModel.DataAnnotations.Schema; 
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)] 
public decimal Identity_Col { get; set; } 

实体框架类文件添加几行代码来标识列。

+2

但是这也会生成id。 如果我想指定自己的值并将其用作表的主键,该怎么办。 –

+0

首先使用EF Core代码,我有一个组合键的表,一列是Identity。添加属性'[DatabaseGenerated(DatabaseGeneratedOption.Identity)]'为我工作。 –

在EF 6中,模型中的字段/列具有以下属性: StoreGeneratedPattern。

将其设置为属性下拉列表中的“标识”。

(我不知道EF 4.上述答案,使用IsDbGenerated,似乎是EF 4)

与此对应的底层XML对元素的属性:

<Property Name="MyTableId" Type="int" Nullable="false" StoreGeneratedPattern="Identity" /> 

- 但您不需要手动处理XML,因为您可以使用设计器。

这是如何搞砸了不清楚。即使在从数据库中刷新我的模型之后,我仍然遇到了问题。如果您在表格中设置PK,或者在生成模型后更改其名称,可能会感到困惑。 (我使用的是表/数据库优先的方法,而不是代码优先)

您不能使用上述方法将C#属性放在实体代码上,因为在这种情况下,实体代码是由EF 。 EF应该理解(“自己”)该领域是一个身份。

把这些attribs上是身份属性的顶部:

[Key] 
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)] 
public int ID { get; set; } 
+0

这似乎不适用于Azure移动服务。我有一个模型与此作为字段: [Index(IsClustered = true)] [DatabaseGenerated(DatabaseGeneratedOption.Identity)] [TableColumnAttribute(TableColumnType.CreatedAt)] public DateTimeOffset? CreatedAt {get;组; } – WiteCastle

+2

我添加了属性,现在我得到这个错误:“ReferentialConstraint中的依赖属性映射到商店生成的列” – Logar314159

+0

这对我来说非常合适。谢谢。 –

在谷歌首次比赛,所以在这里我的解决办法:第一

EF代码:因为一个AUTOINC PK“身份证”的领域和一个guid列,像这样的设计:

[DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
public Guid FileToken { get; set; } 

有一个重复的身份。我将其更改为:

[DatabaseGenerated(DatabaseGeneratedOption.Computed)] 
[DefaultValue("newid()")] 
public Guid FileToken { get; set; } 

并且问题消失了。

希望它可以帮助你。

埃里克

+0

首先使用EF Core代码,我有一个带有组合键的表,其中一列是Identity。添加属性'[DatabaseGenerated(DatabaseGeneratedOption.Identity)]'为我工作。 –

我在我的应用程序这一问题;并修复了它将id字段的属性“StoredGeneratedPattern”更改为Identity。

所以,去模型;看看桌子;点击主关键字的propierties;并更改属性。