【问题标题】:Overriding Inherited mappings in OnModelCreating在 OnModelCreating 中覆盖继承的映射
【发布时间】:2017-01-30 17:14:37
【问题描述】:

我有一个从实现 dbcontext 的基类派生的上下文。 base 类 OnModelCreating 类似于:

protected override void OnModelCreating(ModelBuilder builder)
{
    builder.Entity<TUser>(b =>
    {
       b.HasIndex(u => u.NormalizedUserName).HasName("UserNameIndex").IsUnique();
       ...
    }
}

派生类 OnModelBuilder:

protected override void OnModelCreating(ModelBuilder builder)
{
    base.OnModelCreating(builder);
    builder.Entity...(add my customization)
}

是否可以在派生上下文中删除“IsUnique”?

【问题讨论】:

  • 它不是唯一约束(使用HasAlternateKey 创建的)而是唯一索引。无论如何,“删除”是什么意思 - 完全删除它,即不创建这样的索引?
  • 我想允许重复的 NormalizedUserNames。我正在与基于 ID (int) 的用户合作,而不是基于可以重复的用户名。

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


【解决方案1】:

一般来说,创建HasKeyHasAlternateKeyHasIndex 之类的映射无法撤消。但您可以尽可能更改它们的属性。

在这种特殊情况下,您可以通过为IsUnique 方法的可选参数指定false 来使索引不唯一:

protected override void OnModelCreating(ModelBuilder builder)
{
    base.OnModelCreating(builder);
    builder.Entity<TUser>(b =>
    {
       b.HasIndex(u => u.NormalizedUserName).IsUnique(false);
       ...
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-29
    • 2019-06-29
    • 2013-03-02
    • 1970-01-01
    • 1970-01-01
    • 2013-12-10
    相关资源
    最近更新 更多