无法更新标识列“索引”。 EF核心
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了无法更新标识列“索引”。 EF核心相关的知识,希望对你有一定的参考价值。
就像标题所说,我在尝试更新EF Core中的实体时收到错误消息。
这是我正在尝试更新的实体。注意使用Databasegenerated属性修饰的Index属性。
我尝试装饰wthe属性,因此只有在添加新实体时才会生成一个值,但是没有成功。
关于这个链接:http://ef.readthedocs.io/en/latest/modeling/generated-properties.html#value-generated-on-add
最后,更新方法如下所示:
我在这做错了什么?
对于遇到这种情况的人来说,这是EF Core 1.0的一个错误。见https://github.com/aspnet/EntityFramework/issues/6426。
它已在EF Core 1.2中标记为已修复。
您似乎正在组合太多不同的方法(Fluent和Data Annotation)。你应该坚持其中一个。并且在连接模型时应该有一个键(因此EF知道要附加什么)。
或者:
builder.Entity<Section>()
.HasKey(p => p.Index);
builder.Entity<Section>()
.Property(p => p.Index)
.HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
要么
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
[Key, Column(Order = 0)]
public int Index { get; set; }
编辑:
如果要更改标识列的值,可以执行以下操作:
try
{
_context.Database.ExecuteSqlCommand("SET IDENTITY_INSERT [dbo].[Section] ON");
//Do updates
_context.SaveChanges();
}
finally()
{
_context.Database.ExecuteSqlCommand("SET IDENTITY_INSERT [dbo].[Section] OFF");
}
您可能需要重新创建该列而不是更新它。
我也有这个问题!!我试图为我的属性添加注释[Key,Column(Order = 1)],但它不起作用。
尝试以下方法。我用它来解决我的问题(.Net Core和EF Core 1.1.1)
1.请在Context.cs中添加这些代码
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
// Adding the code below tells DB "NumericId is an AlternateKey and don't update".
modelBuilder.Entity<User>()
.HasAlternateKey(x => x.Index ).HasName("IX_Index");
}
2.在“包管理器”窗口中,执行update-database
参考:
[Stackoverflow] Unique Key Constraints For Multiple Columns In EntityFramework
[MSDN] Alternate Keys (Unique Constraints)
以上是关于无法更新标识列“索引”。 EF核心的主要内容,如果未能解决你的问题,请参考以下文章