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

时间:2016-12-15 17:46:42

标签: .net-core entity-framework-core

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

EntityTypeBuilder<Account>
   .HasOne(a => a.Customer)
   .WithOne(a => a.Account)
   .HasForeignKey<Account>(a => a.CustomerId)

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

migrationBuilder.CreateIndex(
   name: "IX_Accounts_CustomerId",
   table: "Accounts",
   column: "CustomerId",
   unique: true);

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

TL; DR任何使Fluent中的索引在一对一FK中不唯一的方法吗?

1 个答案:

答案 0 :(得分:2)

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

modelBuilder.Entity<Account>().HasIndex(e => e.CustomerId).IsUnique(false);

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