【问题标题】:EF7 IdentityDbContext migration modifying indexEF7 IdentityDbContext 迁移修改索引
【发布时间】:2017-04-03 19:29:25
【问题描述】:

我正在尝试使用 aspnetcore 身份进行多租户,但是我在尝试修改“UserNameIndex”唯一索引以包含租户 ID 时遇到了麻烦。

我可以看到我要修改的索引如下(这是来自Microsoft.AspNetCore.Identity.EntityFrameworkCore/IdentityDbContext.cs)

b.HasIndex(u => u.NormalizedUserName).HasName("UserNameIndex").IsUnique();

这是我的 dbcontext 的摘录

public class MyContext : IdentityDbContext<Customer, CustomerRole, int>
{
    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        base.OnModelCreating(modelBuilder);
        modelBuilder.Entity<Customer>().HasIndex(i => new { i.NormalizedUserName, i.TenantId }).HasName("UserNameIndex").IsUnique();
    }
}

当我添加迁移时,这绝对没有影响 - 但是,如果我重命名索引,它会创建迁移!!不能覆盖索引吗?

【问题讨论】:

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


    【解决方案1】:

    我有同样的问题,我设法解决这个问题的唯一方法是完全覆盖 OnModelCreating 方法。这很不幸,因为它只是我想要修改的全部配置的一小部分。

    public class MyContext : IdentityDbContext<Customer, CustomerRole, int>
    {
        protected override void OnModelCreating(ModelBuilder builder)
        {
            builder.Entity<Customer>(b =>
            {
                b.HasKey(u => u.Id);
                b.HasIndex(u => new { u.NormalizedUserName, u.TenantId}).HasName("UserNameIndex").IsUnique();
                b.HasIndex(u => new { u.NormalizedEmail, u.TenantId}).HasName("EmailIndex");
                b.ToTable("AspNetUsers");
                b.Property(u => u.ConcurrencyStamp).IsConcurrencyToken();
                b.Property(u => u.UserName).HasMaxLength(256);
                b.Property(u => u.NormalizedUserName).HasMaxLength(256);
                b.Property(u => u.Email).HasMaxLength(256);
                b.Property(u => u.NormalizedEmail).HasMaxLength(256);
                b.HasMany((u => u.Claims)).WithOne().HasForeignKey(uc => uc.UserId).IsRequired();
                b.HasMany((u => u.Logins)).WithOne().HasForeignKey(ul => ul.UserId).IsRequired();
                b.HasMany((u => u.Roles)).WithOne().HasForeignKey(ur => ur.UserId).IsRequired();
            });
            builder.Entity<CustomerRole>(b =>
            {
                b.HasKey(r => r.Id);
                b.HasIndex(r => new { r.NormalizedName, r.TenantId}).HasName("RoleNameIndex");
                b.ToTable("AspNetRoles");
                b.Property(r => r.ConcurrencyStamp).IsConcurrencyToken();
                b.Property(u => u.Name).HasMaxLength(256);
                b.Property(u => u.NormalizedName).HasMaxLength(256);
                b.HasMany(r => r.Users).WithOne().HasForeignKey(ur => ur.RoleId).IsRequired();
                b.HasMany(r => r.Claims).WithOne().HasForeignKey(rc => rc.RoleId).IsRequired();
            });
            builder.Entity<IdentityUserClaim<int>>(b =>
            {
                b.HasKey(uc => uc.Id);
                b.ToTable("AspNetUserClaims");
            });
            builder.Entity<IdentityRoleClaim<int>>(b =>
            {
                b.HasKey(rc => rc.Id);
                b.ToTable("AspNetRoleClaims");
            });
            builder.Entity<IdentityUserRole<int>>(b =>
            {
                b.HasKey(r => new
                {
                    r.UserId, r.RoleId
                });
                b.ToTable("AspNetUserRoles");
            });
            builder.Entity<IdentityUserLogin<int>>(b =>
            {
                b.HasKey(l => new
                {
                    l.LoginProvider, l.ProviderKey
                });
                b.ToTable("AspNetUserLogins");
            });
            builder.Entity<IdentityUserToken<int>>(b =>
            {
                b.HasKey(l => new
                {
                    l.UserId, l.LoginProvider, l.Name
                });
                b.ToTable("AspNetUserTokens");
            });
        }
    
    }
    

    不要忘记更新/重新生成迁移。

    请注意,我也有每个租户的角色,所以我也更改了 RoleNameIndex。如果你不想这样,只需将该行更改为:

    b.HasIndex(r => r.NormalizedName).HasName("RoleNameIndex");
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-02
      • 2015-03-01
      • 2016-06-07
      相关资源
      最近更新 更多