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



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

以下是我正在使用的模型构建器代码:

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也没有被检测到/包含。

知道我可能错过了什么吗? 提前感谢!

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

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

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

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

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

migrationBuilder.AddUniqueConstraint(
name: "AK_Users_a_b",
table: "Users",
columns: new[] { "a", "b" });

最新更新