EF Core 1.1 在 FK 上一对一生成唯一索引

Los*_*les 2 entity-framework-core .net-core

我正在使用 EF Core 1.1 并创建了我的一对一关系,例如:

EntityTypeBuilder<Account>
   .HasOne(a => a.Customer)
   .WithOne(a => a.Account)
   .HasForeignKey<Account>(a => a.CustomerId)
Run Code Online (Sandbox Code Playgroud)

现在在我的 DbContext 上使用 Add-Migration 它会生成以下内容:

migrationBuilder.CreateIndex(
   name: "IX_Accounts_CustomerId",
   table: "Accounts",
   column: "CustomerId",
   unique: true);
Run Code Online (Sandbox Code Playgroud)

有没有办法在 Fluent 中指定从索引中删除唯一性?我不介意生成的索引,但就我的目的而言,它不能是唯一的。原因是这些表是可审计的,因此可能存在重复数据(在 PK 之外)。因此,如果该 FK 实体没有更改(但可能在记录中的其他地方发生更改),则记录可以包含相同的 FK id。

TL;DR 有什么方法可以使 Fluent 中一对一 FK 的索引不唯一?

Smi*_*mit 5

如果要使支持外键的索引非唯一,则需要在 fluent api 中的 FK 属性上配置索引并将其设置为非唯一。在您的示例中,在OnModelCreating()方法中添加以下代码行将为您提供所需的结果。

modelBuilder.Entity<Account>().HasIndex(e => e.CustomerId).IsUnique(false);
Run Code Online (Sandbox Code Playgroud)

尽管在一对一关系的 FK 属性中具有重复值可能会在运行时在修复导航属性时产生不良影响。