【问题标题】:EF Core Fluent API (How to remove identity from primary key)EF Core Fluent API(如何从主键中删除标识)
【发布时间】:2018-09-16 00:10:17
【问题描述】:

看起来很简单,但我不知道如何告诉 EF 核心不要创建具有自动递增标识列的实体的主键。我想自己插入我自己的主键值。我意识到我可以使用属性来做到这一点,但我想知道如何通过流畅的 API 设置行为。我从 Property() 方法中看到了 UseSqlServerIdentityColumn() 方法,但我需要将其关闭(而不是打开)。我也试过下面的代码,但它不起作用。

context.Database.ExecuteSqlCommand("SET IDENTITY_INSERT dbo.Employees ON");
context.SaveChanges();
context.Database.ExecuteSqlCommand("SET IDENTITY_INSERT dbo.Employees OFF");

【问题讨论】:

    标签: ef-core-2.1


    【解决方案1】:

    https://docs.microsoft.com/en-us/ef/core/modeling/generated-properties

    modelBuilder.Entity<EntityType>()
        .Property( et => et.Id )
        .ValueGeneratedNever();
    

    【讨论】:

    • 从 EFCORE 5 开始,这不起作用。这样做会导致错误:“要更改列的 IDENTITY 属性,需要删除并重新创建该列。”
    • 那是生成的迁移代码有问题;此答案中的代码仍然是配置模型的适当解决方案。这个答案提供了一种解决方法:stackoverflow.com/a/56648859/1464084
    • 凯文吉是对的。我正在创建一个全新的数据库,我这个“ValueGeneratedNever()”根本没有效果。我多次删除了数据库,并且每次都在 Identity ON 的情况下重新创建它。建议的解决方法对我不起作用(EF Core 5.0.11 和 MSSQL 2016 SP1)。
    猜你喜欢
    • 1970-01-01
    • 2019-11-28
    • 1970-01-01
    • 2014-09-26
    • 1970-01-01
    • 1970-01-01
    • 2021-09-08
    • 1970-01-01
    • 2018-08-18
    相关资源
    最近更新 更多