实体框架错误:无法在表中插入标识列的显式值
我在EF上收到此错误。实体框架错误:无法在表中插入标识列的显式值
Cannot insert explicit value for identity column in table 'GroupMembers_New' when IDENTITY_INSERT is set to OFF.
在分贝列标识增量并在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; }
实体框架类文件添加几行代码来标识列。
但是这也会生成id。 如果我想指定自己的值并将其用作表的主键,该怎么办。 –
首先使用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; }
这似乎不适用于Azure移动服务。我有一个模型与此作为字段: [Index(IsClustered = true)] [DatabaseGenerated(DatabaseGeneratedOption.Identity)] [TableColumnAttribute(TableColumnType.CreatedAt)] public DateTimeOffset? CreatedAt {get;组; } – WiteCastle
我添加了属性,现在我得到这个错误:“ReferentialConstraint中的依赖属性映射到商店生成的列” – Logar314159
这对我来说非常合适。谢谢。 –
在谷歌首次比赛,所以在这里我的解决办法:第一
EF代码:因为一个AUTOINC PK“身份证”的领域和一个guid列,像这样的设计:
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public Guid FileToken { get; set; }
有一个重复的身份。我将其更改为:
[DatabaseGenerated(DatabaseGeneratedOption.Computed)]
[DefaultValue("newid()")]
public Guid FileToken { get; set; }
并且问题消失了。
希望它可以帮助你。
埃里克
首先使用EF Core代码,我有一个带有组合键的表,其中一列是Identity。添加属性'[DatabaseGenerated(DatabaseGeneratedOption.Identity)]'为我工作。 –
我在我的应用程序这一问题;并修复了它将id字段的属性“StoredGeneratedPattern”更改为Identity。
所以,去模型;看看桌子;点击主关键字的propierties;并更改属性。
事实上,更新edmx是解决方案。在ef5中谢谢 –
在edmx设计器中有一个名为'StoreGeneratedPatern'的字段的属性 - 将其设置为'Identity' – timothy