使用 Fluent Api 更改 table 姓名身份

Change table name Identity with Fluent Api

在我的项目中,我使用 Identity。 Identity 的默认设置是在数据库中创建表名。我想把这些名字改成我的名字。

我正在使用 Fluent Api 来配置创建身份的表,例如:

public class UserConfiguration : EntityTypeConfiguration<User>
{
    public string TableName
    {
        get { return "Users"; }
    }
    public UserConfiguration()
    {
        this.ToTable(TableName);
        HasKey(u => u.ProviderId);
    }
} 


public class UserClaimsConfiguration : EntityTypeConfiguration<IdentityUserClaim>
{
    public string TableName
    {
        get { return "UserClaims"; }
    }
    public UserClaimsConfiguration()
    {
        this.ToTable(TableName);
        HasKey(u => u.Id);
    }
}

在上下文中,我将上面的配置添加到数据库:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    base.OnModelCreating(modelBuilder);
    modelBuilder.Configurations.Add(new UserConfiguration());
    modelBuilder.Configurations.Add(new RolesConfiguration());
    modelBuilder.Configurations.Add(new UserClaimsConfiguration());
    modelBuilder.Configurations.Add(new UserLoginsConfiguration());
    modelBuilder.Configurations.Add(new UserRoleConfiguration());            
}

之后我进行了迁移和更新数据库 –TargetMigration: RenameTablesInDB。

但是我发现了一个错误:

Cannot find the object "dbo.AspNetUserClaims" because it does not exist or you do not have permissions.

下线base.OnModelCreating(modelBuilder);在

       protected override void OnModelCreating(DbModelBuilder modelBuilder)
{


    modelBuilder.Configurations.Add(new UserConfiguration());
    modelBuilder.Configurations.Add(new RolesConfiguration());
    modelBuilder.Configurations.Add(new UserClaimsConfiguration());
    modelBuilder.Configurations.Add(new UserLoginsConfiguration());
    modelBuilder.Configurations.Add(new UserRoleConfiguration());

        base.OnModelCreating(modelBuilder);

}

我解决了我的问题。 当您使用 fluent api 重新定义身份的 table 名称时。您必须设置一些强制设置。

它是 IdentityRole 中的行

this.HasKey<string>(r => r.Id); // It's row decision

IdentityLoginsConfiguration 中也有一行

HasKey<string>(l => l.UserId);

和身份用户角色

HasKey(r => new { r.RoleId, r.UserId });

现在都在一起了。 我将描述所有的动作。 关注..

首先,我们有配置数据库的文件。 我们在配置中使用 EntityTypeConfiguration

EntityTypeConfiguration 是 Fl​​uent API 中的重要 class。 EntityTypeConfiguration 为您提供重要的方法来配置实体及其属性以覆盖各种代码优先约定。

我们的类配置:

public class RolesConfiguration : EntityTypeConfiguration<IdentityRole>
{
    public string TableName
    {
        get { return "Roles"; }
    }
    public RolesConfiguration()
    {
        this.ToTable(TableName);
        this.HasKey<string>(r => r.Id); // It's row decision
    }
}

public class UserClaimsConfiguration : EntityTypeConfiguration<IdentityUserClaim>
{
    public string TableName
    {
        get { return "UserClaims"; }
    }
    public UserClaimsConfiguration()
    {
        this.ToTable(TableName);
    }
}

public class UserConfiguration : EntityTypeConfiguration<User>
{
    public string TableName
    {
        get { return "Users"; }
    }
    public UserConfiguration()
    {
        this.ToTable(TableName);
    }
}
 public class UserLoginsConfiguration : EntityTypeConfiguration<IdentityUserLogin>
{
    public string TableName
    {
        get { return "UserLogins"; }
    }

    public UserLoginsConfiguration()
    {
        this.ToTable(TableName);
        HasKey<string>(l => l.UserId); // It's row was my decision
    }
}


public class UserRoleConfiguration : EntityTypeConfiguration<IdentityUserRole>
{
    public string TableName
    {
        get { return "UserRoles"; }
    }

    public UserRoleConfiguration()
    {
        this.ToTable(TableName);
        HasKey(r => new { r.RoleId, r.UserId }); // It's row was my decision
    }
}

我们还必须向数据库添加配置:

        modelBuilder.Configurations.Add(new UserConfiguration());
        modelBuilder.Configurations.Add(new RolesConfiguration());
        modelBuilder.Configurations.Add(new UserClaimsConfiguration());
        modelBuilder.Configurations.Add(new UserLoginsConfiguration());
        modelBuilder.Configurations.Add(new UserRoleConfiguration());
        #endregion

        base.OnModelCreating(modelBuilder);

之前我有

之后,我将配置添加到我的数据库