EF Core Fluent API - 迁移中未检测到/包含唯一约束

问题描述 投票:1回答:2

我试图在两列上添加一个唯一约束。我发现有多个来源声明我应该在EF Core Fluent API应用程序中使用HasAlternateKey方法。但是,在运行Add-Migration之后,迁移文件中生成的代码不包含约束 - 几乎就像故意忽略或未检测到它一样。

这是我正在使用的ModelBuilder代码:

        modelBuilder.Entity<PlasmidStockCode>(e =>
        {
            e.ToTable("PlasmidStockCode");

            e.HasKey(c => c.ID);
            e.Property(c => c.ID).ValueGeneratedOnAdd();

            e.HasAlternateKey(c => new { c.ClientName, c.PlasmidName });

            e.HasMany(c => c.PlasmidStockComments).WithOne().HasForeignKey(c => c.PlasmidStockCodeID).OnDelete(DeleteBehavior.Restrict);
            e.HasMany(c => c.PlasmidStockLots).WithOne().HasForeignKey(c => c.PlasmidStockCodeID).OnDelete(DeleteBehavior.Restrict);
            e.HasMany(c => c.qPCRTargets).WithOne().HasForeignKey(c => c.PlasmidStockCodeID).OnDelete(DeleteBehavior.Restrict);
        });

        AddBaseConfiguration(modelBuilder);
    }

我也尝试过使用.HasIndex,但不幸的是,它也没有被检测到/包括在内。

有什么想法,我可能会失踪?提前致谢!

c# sql-server entity-framework-core ef-fluent-api
2个回答
1
投票

在DBContext类的IsUnique方法中使用HasIndexOnModelCreating方法将复合键添加到表中。然后使用Add-Migration <YourMigrationName>添加迁移,然后在程序管理器控制台中运行Update-Database

modelBuilder.Entity<PlasmidStockCode>(b =>
    {
        b.HasIndex(e => (new { e.ClientName, e.PlasmidName })).IsUnique();
    });

0
投票

我做了类似的事情似乎工作得很好:

 builder.Entity<AccountUser>().HasAlternateKey(c => new { c.a, c.b });

约束将添加到生成的迁移文件的Up方法中

migrationBuilder.AddUniqueConstraint(
name: "AK_Users_a_b",
table: "Users",
columns: new[] { "a", "b" });
© www.soinside.com 2019 - 2024. All rights reserved.