我试图在两列上添加唯一约束。我发现有多个来源声明我应该对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,但不幸的是,也没有被检测/包含。
关于我可能会缺少的任何想法吗?预先感谢!
答案 0 :(得分:1)
在您的DBContext类的IsUnique
方法中使用HasIndex
和OnModelCreating
方法将组合键添加到表中。然后使用Add-Migration <YourMigrationName>
添加迁移,然后在Program Manager控制台中运行Update-Database
。
modelBuilder.Entity<PlasmidStockCode>(b =>
{
b.HasIndex(e => (new { e.ClientName, e.PlasmidName })).IsUnique();
});
答案 1 :(得分: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" });