【问题标题】:EF Core Migration - PK Violation when seeding dataEF Core 迁移 - 播种数据时违反 PK
【发布时间】:2020-08-27 22:30:42
【问题描述】:

我正在处理一个现有项目,该项目的数据库似乎是通过 SQL Server \ SSMS 手动创建的数据。

在项目的另一端,其他人已经创建了一个种子数据\配置文件。这是我被引入解决方案并创建了一个新的迁移文件的地方,发现我收到错误:

主键约束“PK_AnswerTypes”。无法在对象“forms.AnswerTypes”中插入重复键。重复键值为 (1)

查看 Azure Pipelines,这似乎是自创建配置文件以来的一个问题。

配置代码是

    public void Configure(EntityTypeBuilder<FieldType> builder)
    {
        if (builder == null)
        {
            throw new ArgumentNullException(nameof(builder));
        }

        builder.ToTable("FieldTypes", FormEngineSchemas.Forms);

        // TODO: convert to enum
        builder.HasData(
            new FieldType
            {
                FieldTypeId = 1,
                FieldTypes = "NUMBER"
            },
            new FieldType
            {
                FieldTypeId = 2,
                FieldTypes = "DROPDOWN"
            },
            new FieldType
            {
                FieldTypeId = 3,
                FieldTypes = "DATE"
            });
    }

上标是

protected override void Up(MigrationBuilder migrationBuilder)
{
    migrationBuilder.InsertData(
        schema: "forms",
        table: "AnswerTypes",
        columns: new[] { "AnswerTypeId", "AnswerTypes" },
        values: new object[,]
        {
            { 1, "Range" },
            { 2, "Length" },
            { 3, "regex" }
        });      
}

如果有人能帮助建议我如何通过这个,我将不胜感激,因为我不想删除数据库中的现有数据,因为我不想冒潜在的孤立记录或删除失败的风险。

我环顾四周,这是我能看到的最接近我的问题的地方

https://github.com/dotnet/efcore/issues/12324

看这里好像播种已经正确完成了

https://www.learnentityframeworkcore.com/migrations/seeding

https://docs.microsoft.com/en-us/archive/msdn-magazine/2018/august/data-points-deep-dive-into-ef-core-hasdata-seeding

所以,我的问题是;

  1. 如果数据库从一开始就全部创建并播种并且一切正常,那么所有后续迁移都可以正常工作,并且不会再次尝试播种。

  2. 解决此问题的最佳方法是什么。

  3. 有什么我可能错过或没有考虑的吗?

谢谢

西蒙

【问题讨论】:

    标签: c# ef-code-first seeding ef-core-3.0


    【解决方案1】:

    由于您不想丢失数据,您可以考虑使用migrationBuilder.UpdateData() 而不是migrationBuilder.InsertData()。 InserData 方法将向数据库添加新记录,而 UpdateData 将搜索和更新数据库中的现有记录。

    确保您拥有 EF Core v2.1 及更高版本才能正常工作。

    【讨论】:

      猜你喜欢
      • 2020-08-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-26
      • 1970-01-01
      • 1970-01-01
      • 2021-11-23
      • 2019-02-17
      相关资源
      最近更新 更多