【问题标题】:EF Core 1.1 generating unique index on FK one-to-oneEF Core 1.1 在 FK 上一对一生成唯一索引
【发布时间】:2016-12-15 17:46:42
【问题描述】:

我正在使用 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 中不唯一?

【问题讨论】:

  • 如果表可以包含重复项,那么不是one-to-one,而是one-to-many,你不觉得吗?

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


【解决方案1】:

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

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

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

【讨论】:

  • 这对我不起作用。它仍然创建了唯一索引。
  • 我们是否可以为一对一映射添加一个功能,我们可以将 FK 指定为非唯一索引,如果是这种情况,EF 会自动限制级联删除?
  • 顺便说一句,没有 OnModelConfiguring() 所以我假设你在谈论 OnModelCreating()。如果不是,我在 DbContext 中看到的唯一其他方法是 OnConfiguring(DbContextOptionsBuilder optionsBuilder),我认为这不是你在说的。
猜你喜欢
  • 2017-04-07
  • 2017-01-11
  • 2020-12-27
  • 2017-09-15
  • 1970-01-01
  • 1970-01-01
  • 2014-11-28
  • 2014-08-13
  • 2019-02-14
相关资源
最近更新 更多