使用 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
是 Fluent 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);
之前我有
之后,我将配置添加到我的数据库
在我的项目中,我使用 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
是 Fluent 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);
之前我有
之后,我将配置添加到我的数据库