【问题标题】:How to seed data in migration that Id increment automatically in ef core 3?如何在 ef core 3 中自动增加 Id 的迁移数据?
【发布时间】:2021-04-20 10:33:56
【问题描述】:

我在 dataContext 的 OnModelCreating 方法中使用以下代码:

            modelBuilder.Entity<EnumValue>().HasData(
            new EnumValue
            {
                EnumValueId = 1,
                EnumValueName ="test"
            });

但我不想手动设置 EnumValueId = 1,我想自动设置。 这是我的 EnumValue 模型:

[Key]
[Required]
public int EnumValueId { get; set; }
[Required]
public string EnumValueName { get; set; }

如何让Id属性自动递增?

【问题讨论】:

  • 你自己试过了吗(没有手动设置id)?按照惯例,以Id 结尾且类型为int 的键属性默认应为自动递增(无需额外配置)。除非您有一些不是从模型创建的现有数据库(不使用代码优先方法)。如果是这种情况,则需要手动修改数据库表。
  • @KingKing 我绑了,我得到了错误,说 Id 不能是非零值。我还阅读了文档,如果不想编写自定义迁移,您应该声明 Id
  • 这是一种奇怪的行为,可能会在不同版本的 EFCore 中发生变化。无论如何,您可以尝试找到一些方法将密钥属性显式配置为身份,对于SQL Server,我们有类似modelBuilder.Entity&lt;EnumValue&gt;().Property(e =&gt; e.EnumValueId).UseSqlServerIdentityColumn() - 对于postgresql,它应该有一些类似的扩展方法(由相应的EFCore提供程序实现PostgreSQL)。
  • 请注意,在对配置或模型进行任何更新后,您需要通过自动生成的迁移运行数据库更新。否则你必须手动更新数据库(这可能容易出错,导致数据库和模型不匹配)。

标签: postgresql asp.net-core migration seeding


【解决方案1】:

需要指定主键值,即使通常是 由数据库生成。它将用于检测数据更改 迁移之间。

https://docs.microsoft.com/en-us/ef/core/modeling/data-seeding

【讨论】:

    猜你喜欢
    • 2022-08-17
    • 1970-01-01
    • 1970-01-01
    • 2023-03-21
    • 2021-11-23
    • 2018-06-19
    • 2019-08-03
    • 1970-01-01
    • 2013-02-04
    相关资源
    最近更新 更多