2016-12-15 77 views
1

我使用EF核心1.1和创建了一个一对一的关系,一个例子:EF核心1.1 FK生成唯一索引一到一个

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

现在,使用添加迁移我的DbContext它会生成以下内容:

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

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

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

+0

如果表中可以包含重复项,那么它不是'一对一',而是'一对多',你不觉得吗? –

回答

2

如果要使索引支持外键非唯一性,则需要在流利api中的FK属性上配置索引并将其设置为非唯一。 在你的例子中,在OnModelCreating()方法中添加下面的代码行会给你想要的结果。

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

虽然具有用于一对一的关系在FK属性重复值可以具有在运行时不期望的影响,同时固定向上导航属性。

+0

这不适合我。它仍然创造了独特的索引。 –

+0

我们是否可以添加一对一的映射功能,我们可以将FK指定为非唯一索引,如果情况如此,EF会自动限制级联删除? –

+0

顺便说一句,没有OnModelConfiguring(),所以我假设你在谈论OnModelCreating()。如果没有,我在DbContext中看到的唯一的其他方法是OnConfiguring(DbContextOptionsBuilder optionsBuilder),我不认为这就是你正在谈论的内容。 –