无法更新标识列“索引”。 EF核心

问题描述 投票:0回答:3

就像标题所说,我在尝试更新EF Core中的实体时收到错误消息。

这是我正在尝试更新的实体。注意使用Databasegenerated属性修饰的Index属性。 enter image description here

我尝试装饰wthe属性,因此只有在添加新实体时才会生成一个值,但是没有成功。

enter image description here

关于这个链接:http://ef.readthedocs.io/en/latest/modeling/generated-properties.html#value-generated-on-add

最后,更新方法如下所示:

enter image description here

我在这做错了什么?

.net ef-code-first entity-framework-core
3个回答
2
投票

对于遇到这种情况的人来说,这是EF Core 1.0的一个错误。见https://github.com/aspnet/EntityFramework/issues/6426

它已在EF Core 1.2中标记为已修复。


1
投票

您似乎正在组合太多不同的方法(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");
}

您可能需要重新创建该列而不是更新它。


1
投票

我也有这个问题!!我试图为我的属性添加注释[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)

© www.soinside.com 2019 - 2024. All rights reserved.